我有下面的代码没有返回一个项目:C#收益率回报预期
private void ProcessQueue()
{
foreach (MessageQueueItem item in GetNextQueuedItem())
PerformAction(item);
}
private IEnumerable<MessageQueueItem> GetNextQueuedItem()
{
if (_messageQueue.Count > 0)
yield return _messageQueue.Dequeue();
}
最初没有在队列中ProcessQueue一个项目被调用。 在PerformAction期间,我会向_messageQueue添加更多项目。但是,foreach循环在初始项目之后退出,并且看不到后续的项目添加。
我感觉到某种方式队列的初始状态被yield所捕获。
有人可以解释发生了什么,并提供解决方案吗?
如果您只是在ProcessQueue中使用while循环而不是使用枚举器,代码会更简单。枚举器非常方便,但对于简单的循环处理而言,它们可能过于矫枉过正。 – 2010-03-23 23:20:16
好评 - 虽然我通过一系列重构来了解上述情况,但我只是陷入了好奇心的追逐之中。 – 2010-03-24 02:41:59