我有下面的代碼沒有返回一個項目: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