Ответ 1
Краткий ответ
Возможно (как, может ли он когда-либо произойти, в течение жизни вселенной)? Да.
Вероятно (при все)? Нет.
Более длинный ответ
Microsoft использует алгоритм версии 4 для генерации идентификаторов GUID (см. также: здесь), который производит полностью (псевдо) случайное число.
Учитывая количество возможных идентификаторов GUID, вероятность дублировать крошечная. Например, непостижимо крошечный.
Вы обеспокоены concurrency: к счастью, метод NewGuid
потокобезопасный, что означает, что он либо блокирует, либо использует поточно-статический генератор случайных чисел для своих целей. Первый подход будет эффективно сериализовать все вызовы на NewGuid
, чтобы они происходили в последовательности (никогда не одновременно), в то время как последний выполнял бы вызовы из отдельных потоков независимо друг от друга.
В любом случае, единственная причина, по которой вам придется опасаться получения дубликатов из двух потоков, создающих случайные числа одновременно - GUID
или нет, - если бы базовые генераторы, используемые потоками, работали (1) с (что может быть связано только с дефектом дизайна) и (2) зависящим от времени образом (который не соответствует алгоритму GUID версии 4).
Итак, да, практически говоря, вы можете рассматривать GUID, созданные одновременно из отдельных потоков, чтобы быть уникальными.