readonly ThreadLocal random =
new ThreadLocal(() => new Random(GetSeed()));
int Rand()
{
return random.Value.Next();
}
static int GetSeed()
{
return Environment.TickCount * Thread.CurrentThread.ManagedThreadId;
}
(shamelessly stolen from the comment of Jeroen Vannevel)