title: Duplicate returned by Guid.NewGuid()?
body: <p>We have an application that generates simulated data for one of our services for testing purposes.  Each data item has a unique Guid.  However, when we ran a test after some minor code changes to the simulator all of the objects generated by it had the same Guid.</p>
  
  <p>There was a single data object created, then a for loop where the properties of the object were modified, including a new unique Guid, and it was sent to the service via remoting (serializable, not marshal-by-ref, if that's what you're thinking), loop and do it again, etc.</p>
  
  <p>If we put a small Thread.Sleep( ...) inside of the loop, it generated unique id's.  I think that is a red-herring though.  I created a test app that just created one guid after another and didn't get a single duplicate.</p>
  
  <p>My theory is that the IL was optimized in a way that caused this behavior.  But enough about my theories.  What do YOU think?  I'm open to suggestions and ways to test it.</p>
  
  <p>UPDATE: There seems to be a lot of confusion about my question, so let me clarify.  I DON'T think that NewGuid() is broken.  Clearly it works.  Its FINE!  There is a bug somewhere though, that causes NewGuid() to either:
  1) be called only once in my loop
  2) be called everytime in my loop but assigned only once
  3) something else I haven't thought of</p>
  
  <p>This bug can be in my code (MOST likely) or in optimization somewhere.</p>
  
  <p>So to reiterate my question, how should I debug this scenario? </p>
  
  <p>(and thank you for the great discussion, this is really helping me clarify the problem in my mind) </p>
  
  <p>UPDATE # 2: I'd love to post an example that shows the problem, but that's part of my problem.  I can't duplicate it outside of the whole suite of applications (client and servers).</p>
  
  <p>Here's a relevant snippet though:</p>
  
  <pre><code>OrderTicket ticket = new OrderTicket(... );
  
  for( int i = 0; i &lt; _numOrders; i++ )
  {
      ticket.CacheId = Guid.NewGuid();
      Submit( ticket );  // note that this simply makes a remoting call
  }
  </code></pre>