Вы используете два экземпляра класса Random
. Используя parameterless constructor, генератор случайных чисел высевается с использованием значения, основанного на системных часах.
Это означает, что если вы создаете два экземпляра Random
вскоре после друг друга, они будут инициализированы с использованием того же значения, потому что системные часы имеют конечное разрешение. Наличие того же семени означает, что эти два экземпляра будут иметь такую же последовательность результатов.
Некоторые Googling показали, что с помощью Random
кросса-нити может привести к его поломке и возвращает бесконечную последовательность нулей, поэтому если у вас есть мульти-нить этой конкретной части кода, вы можете захотеть взглянуть на this article о том, как для создания однопоточной безопасной версии класса Random
.
doh, конечно :) – danielovich
Правильно, но ... будьте осторожны, что 'System.Random' не является потокобезопасным, поэтому совместное использование одного экземпляра между несколькими задачами threadpool (через' Task.Run') не является хорошая идея. – LukeH
@ LukeH Спасибо, я отредактировал свой ответ соответственно. –