Ответ 1
Я не понимаю, как это связано с "Генератор случайных строчек, возвращающих одну строчку".
Не имеет прямого отношения, хотя первопричина одна и та же. Лучшим дубликатом был бы этот вопрос: Почему я продолжаю получать два одинаковых случайных значения в этом коде?
В нем содержится объяснение того, что new Random
делает - любезно предоставлено документация:
Начальное значение по умолчанию выводится из системных часов и имеет конечное разрешение. В результате различные объекты Random, которые создаются в тесной последовательности вызовом конструктора по умолчанию, будут иметь одинаковые начальные значения по умолчанию и, следовательно, будут создавать одинаковые наборы случайных чисел.
Другими словами: если вы быстро создаете объекты Random
, они будут создавать одну и ту же последовательность случайных чисел.
Он создавал случайный экземпляр в методе. Я называю это совершенно разными задачами, поэтому они должны быть независимыми друг от друга.
Не имеет значения, созданы ли эти объекты в разных потоках (или Task
s) - они зависят только от системного времени, когда они созданы, ни на что другое. На самом деле они независимы друг от друга, как вы сказали. Но они оба зависят от того же значения семени, которое является системным временем при создании.
Правильный способ решения этой обычно имеет только один экземпляр класса Random
. - На самом деле такой код: new Random().Next(…)
- это запах кода, поскольку он неправильно использует класс Random
: вы не должны генерировать новый экземпляр для каждого вызова; вместо этого вы должны повторно использовать один и тот же экземпляр для генерации последовательности случайных чисел.
К сожалению, вы не можете просто использовать один и тот же экземпляр Random
для разных параллельных задач, поскольку