Дубликат возвращен Guid.NewGuid ()?

У нас есть приложение, которое генерирует смоделированные данные для одного из наших сервисов в целях тестирования. Каждый элемент данных имеет уникальный Guid. Однако, когда мы запустили тест после незначительных изменений кода в симуляторе, все объекты, сгенерированные им, имели одинаковый Guid.

Был создан один объект данных, затем цикл for, в котором были изменены свойства объекта, включая новый уникальный Guid, и он был отправлен в службу через удаленное взаимодействие (сериализуемый, а не маршал-по-реф, если это то, что вы Думаете), зациклите и сделайте это снова и т. д.

Если мы поместим небольшой Thread.Sleep (...) внутри цикла, он сгенерирует уникальные идентификаторы. Я думаю, что это красная сельдь, хотя. Я создал тестовое приложение, которое просто создавало один гид за другим и не получало ни одного дубликата.

Моя теория заключается в том, что IL был оптимизирован таким образом, что вызвало такое поведение. Но хватит о моих теориях. Что ты думаешь? Я открыт для предложений и способов проверить это.

ОБНОВЛЕНИЕ: Кажется, в моем вопросе много путаницы, поэтому позвольте мне уточнить. Я не думаю, что NewGuid () не работает. Понятно, что это работает. Все в порядке! Однако есть где-то ошибка, которая заставляет NewGuid () либо: 1) вызываться только один раз в моем цикле 2) вызываться каждый раз в моем цикле, но назначаться только один раз 3) что-то еще, о чем я не думал

Эта ошибка может быть в моем коде (наиболее вероятно) или в оптимизации где-то.

Итак, чтобы повторить мой вопрос, как я должен отладить этот сценарий?

(и спасибо за отличную дискуссию, это действительно помогает мне прояснить проблему в моей голове)

ОБНОВЛЕНИЕ № 2: Я хотел бы опубликовать пример, который показывает проблему, но это часть моей проблемы. Я не могу скопировать его за пределы целого набора приложений (клиент и серверы).

Вот соответствующий фрагмент, хотя:

OrderTicket ticket = new OrderTicket(... );

for( int i = 0; i < _numOrders; i++ )
{
    ticket.CacheId = Guid.NewGuid();
    Submit( ticket );  // note that this simply makes a remoting call
}

Ответы на вопрос(7)

Ваш ответ на вопрос