我正在开发一个集中使用随机生成的值的应用程序.
我有两个选择:
限制是:我想保留应用程序以实际产生独特的输出.
单个全局随机对象与一组本地随机对象之间的优缺点是什么?
单个问题Random是您可能将它(直接或间接通过异步代码/回调)传递给多个线程.而且由于Random不是线程安全的,您需要信任该代码进行同步.如果您不能信任该代码,请编写一个包装器Random,为您执行同步,或者使用[ThreadStatic]/ ThreadLocal<T>instance.
另请注意,随机与独特不完全相同......
但是,如果在方法中声明它 - 那么任何紧密循环实际上都保证为每个循环迭代生成相同的值 - 即
foreach(var foo in foos) foo.SomeMethod();
Run Code Online (Sandbox Code Playgroud)
如果SomeMethod旋转a Random,你很可能会看到重复的值.