我有以下代码:
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捕获的.
有人能解释发生了什么并给出解决方案吗?
您的程序完全按照您的指示执行:如果Count > 0- 则产生一个项目,否则产生零项目.
要返回项目直到队列变空,请尝试:
while (_messageQueue.Count > 0)
Run Code Online (Sandbox Code Playgroud)