System.Random ist nicht Thread-sicher! Bei „gelichzeitigem“ Aufruf aus verschiedenen Threads, gibt Next() irgendwann nur noch „0“ zurück. Um dies zu verhindern, muss entweder jeder Aufruf an eine Random-Instanz durch „lock ()“ umschlossen werden:
lock (MyRandomMember) { MyRandomMember.Next(); }
oder jeder Thread erhält eine eigene Random-Instanz, was bequem über das Attribut „ThreadStatic“ möglich ist:
[ThreadStatic] private static Random _myRandomMember; private static Random MyRandomMember { get { return _myRandomMember ?? (_myRandomMember = new Random()); } }