Submit方法是异步调用吗?或者在任何阶段ticket对象都进入另一个线程吗?
在代码示例中,您正在重用同一对象。如果Submit在短暂延迟后在后台线程中发送票据(并且不复制),那么更改CacheId实际上会更新所有挂起的提交。这也解释了为什么Thread.Sleep可以解决该问题。请尝试此操作:
for( int i = 0; i < _numOrders; i++ )
{
OrderTicket ticket = new OrderTicket(... );
ticket.CacheId = Guid.NewGuid();
Submit( ticket ); // note that this simply makes a remoting call
}
如果由于某种原因无法进行此操作,请尝试以下方法,看看它们是否仍然相同:
ticket.CacheId = new Guid("00000000-0000-0000-0000-" +
string.Format("{0:000000000000}", i));