Вот кульминация сообщения Skeet для случайного провайдера:
public static class RandomProvider
{
private static int seed = Environment.TickCount;
private static ThreadLocal randomWrapper = new ThreadLocal(() =>
new Random(Interlocked.Increment(ref seed))
);
public static Random GetThreadRandom()
{
return randomWrapper.Value;
}
}
Я хотел бы использовать ту же концепцию в проекте .NET 3.5, поэтому ThreadLocal не вариант.
Как бы вы изменили код, чтобы иметь потокобезопасный случайный провайдер без помощи ThreadLocal?
Хорошо, пока я использую [ThreadStatic] Саймона, поскольку я понимаю его лучше всего. Здесь много полезной информации, которую можно пересмотреть и переосмыслить, если позволит время. Спасибо всем!
public static class RandomProvider
{
private static int _seed = Environment.TickCount;
[ThreadStatic]
private static Random _random;
///
/// Gets the thread safe random.
///
///
public static Random GetThreadRandom() { return _random ?? (_random = new Random(Interlocked.Increment(ref _seed))); }
}