我有以下代码:
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 循环在初始项之后退出,并且看不到添加的后续项。
我感觉到队列的初始状态以某种方式被产量捕获。
有人可以解释发生了什么并给出解决方案吗?