我有以下代码:
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 捕获。
有人可以解释发生了什么并给出解决方案吗?
最佳答案
您的程序完全按照您的指示执行:如果 Count > 0
则生成一项,否则生成零项。
要返回项目直到队列变空,尝试:
while (_messageQueue.Count > 0)
关于C# yield return 没有按预期返回项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2504192/