I have the following class
class Program
{
static Random _Random = new Random();
static void Main(string[] args)
{
...
for (int i = 0;
Random is not thread-safe - you shouldn't be using the same instance from multiple threads. It can get much worse than just returning the same data - by using it from multiple threads, you can get it "stuck" in a state where it will always return 0, IIRC.
Obviously you don't just want to create a new instance for each thread at roughly the same time, as they'll end up with the same seeds...
I have an article which goes into the details of this and provides an implementation which lazily instantiates one instance of Random
per thread using an incrementing seed.