В идеале вы хотите поддерживать экземпляр класса Random
дольше, чем время жизни одной страницы. Do not сделать это, поместив его в статическую переменную; класс Random
не является потокобезопасным, и это приведет к проблемам. От документов :
Любые члены экземпляра не гарантируют поточно-ориентированность.
Мой любимый подход - это класс-оболочка RandomGen2 от команды Microsoft ParallelFX (который действительно знает, что они делают с многопоточностью), который использует экземпляр для каждого потока (в основном) без блокировок и потоков. безопасные случайные числа.
public static class RandomGen2
{
private static Random _global = new Random();
[ThreadStatic]
private static Random _local;
public static int Next()
{
Random inst = _local;
if (inst == null)
{
int seed;
lock (_global) seed = _global.Next();
_local = inst = new Random(seed);
}
return inst.Next();
}
}
Который вы можете затем назвать следующим образом:
var rand = RandomGen2.Next();
Возможно, вам понадобится добавить дополнительные методы, чтобы обернуть другие Random
методы, к которым вы хотите получить доступ, и я бы предложил более подходящее имя, например ThreadSafeRandom
, но оно демонстрирует принцип.