Поскольку поколение GUID является зависящим от времени, если Система. Гуид. NewGuid () называют многократно в тот же самый момент на различных потоках, он мог возвратить идентичные GUID?
В Windows GUID (UUID) создается с помощью криптографического генератора случайных чисел с помощью UuidCreate . Это UUID версии 4 согласно RFC 4122 . Никакие временные метки или карты Ethernet не задействованы, если только вы не используете GUID старой школы версии 1, созданный с помощью UuidCreateSequential .
См. Также Насколько случайным является System.Guid.NewGuid ()? (Возьмите два)
Нет, внутри него находится серийный номер, который меняется при каждом вызове, поэтому несколько одновременных вызовов в разных потоках на одной системе не создадут дубликаты Guid.
Это не означает, что есть видимая часть Guid, которая может быть увеличена для каждого вызова.
Функция NEWID Transact-SQL, а также функции и методы прикладного API генерируют новые значения уникального идентификатора на основе идентификационного номера своей сетевой карты и уникального номера на основе часов ЦП. Каждая сетевая карта имеет уникальный идентификационный номер. Значение uniqueidentifier, возвращаемое NEWID, генерируется с помощью сетевой карты на сервере. Значение uniqueidentifier, возвращаемое функциями и методами API приложения, создается с помощью сетевой карты на клиенте.
. Он не будет генерировать дубликаты во времени или на любом компьютере согласно msdn .
Если ваши потоки не работают на разных ядрах вашей машины, только один поток будет фактически работать в данный момент времени. Следовательно, я не думаю, что вызовы NewGuid () будут выполняться в одно и то же время.