C#yield返回未按预期返回项目

Jih*_*Han 2 c# yield

我有以下代码:

private void ProcessQueue()
{
    foreach (MessageQueueItem item in GetNextQueuedItem())
        PerformAction(item);
}

private IEnumerable<MessageQueueItem> GetNextQueuedItem()
{
    if (_messageQueue.Count > 0)
        yield return _messageQueue.Dequeue();
}
Run Code Online (Sandbox Code Playgroud)

最初,当调用ProcessQueue时,队列中有一个项目.在PerformAction期间,我会向_messageQueue添加更多项目.但是,foreach循环在初始项目之后退出,并且未看到添加的后续项目.

我感觉到某种程度上,队列的初始状态是由yield捕获的.

有人能解释发生了什么并给出解决方案吗?

And*_*ass 6

您的程序完全按照您的指示执行:如果Count > 0- 则产生一个项目,否则产生零项目.

要返回项目直到队列变空,请尝试:

while (_messageQueue.Count > 0)
Run Code Online (Sandbox Code Playgroud)