new Random()
この質問は、が非常に速く呼び出されると、に基づいていると私が想定しているのと同じ値がシードされるという知識から来ていDateTime.Now.Ticks
ます。
オンラインカジノを実装する最新バージョンのASP.NET、IIS、.NETなどにトラフィックの多いWebアプリケーションがあるとします。シミュレートされたスロットマシンは、単一の乱数ストリームからプルする必要があると思います。
大量の状況では、同じ乱数ジェネレーターを備えた2台のスロットマシンが発生し、大きなジャックポットが多すぎる可能性があります。私は疑似ランダムジェネレーターを完全には理解していませんが、オンラインカジノを安全に実装するには、一度だけシードされた単一のジェネレーターからプルする必要があるというのが私の直感です。
私が考えることができる1つの解決策は、数値をプッシュする単一のスレッドを持つ同期キューですが、マルチサイトアプリケーション間で同期する方法がわかりません。
このシナリオに対する良い/標準的な解決策はありますか?
更新:私が取り組んでいる実際のシナリオ(問題を引き起こすのに十分なボリュームを取得する可能性は実際にはありません)
私の実際の状況では、トラフィックが適度に多いasp.net Webフォームサイトがあり、要求ごとに2つのユーザーコントロールのいずれかを表示する必要があります。私は次のコードでそうしました:
// Randomly display one of (FreeCreditScore1, MyFreeScoreNow1)
private void ShowCreditScoreAd()
{
FreeCreditScore1.Visible = (new Random().Next(2) == 1);
MyFreeScoreNow1.Visible = !FreeCreditScore1.Visible;
}
上記のコードを連続して呼び出すことで単体テストを行うと失敗new Random()
し、同じ「ダニ」で呼び出されたことが理由であることがわかりました。
そうは言っても、現在の実装で十分だと思いますが(自由に修正してください)、本当に厳密にしたければ、どうすれば解決できるのか興味がありました...