У нас есть приложение, которое генерирует смоделированные данные для одного из наших сервисов для целей тестирования. Каждый элемент данных имеет уникальный Guid. Однако, когда мы запускали тест после некоторых незначительных изменений кода в симуляторе, все объекты, сгенерированные им, имели тот же Guid.
Был создан один объект данных, затем цикл for, в котором свойства объекта были изменены, включая новый уникальный Guid, и он был отправлен службе через удаленный доступ (сериализуемый, а не маршал-by-ref, если это то, что вы думаете), цикл и сделать это снова и т.д.
Если мы помещаем небольшой поток Thread.Sleep(...) внутри цикла, он генерирует уникальный идентификатор. Я думаю, что это красно-селедка. Я создал тестовое приложение, которое только что создало один guid за другим и не получило ни одного дубликата.
Моя теория заключается в том, что ИЛ был оптимизирован таким образом, который вызвал такое поведение. Но достаточно о моих теориях. Что вы думаете? Я открыт для предложений и способов тестирования.
ОБНОВЛЕНИЕ: Кажется, у меня много путаницы в моем вопросе, поэтому позвольте мне уточнить. Я НЕ считаю, что NewGuid() сломан. Ясно, что это работает. Все нормально! Однако есть ошибка, которая вызывает NewGuid(): 1) вызывается только один раз в моей петле 2) вызывается каждый раз в моем цикле, но назначается только один раз 3) что-то еще я не думал о
Эта ошибка может быть в моем коде (вероятно, MOST) или в оптимизации.
Итак, чтобы повторить мой вопрос, как мне отладить этот сценарий?
(и спасибо за отличную дискуссию, это действительно помогает мне прояснить проблему в моем сознании)
ОБНОВЛЕНИЕ # 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
}