C# yield return 没有按预期返回项目

标签 c# yield

我有以下代码:

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/

相关文章:

javascript - ES6 生成器代码中 task/perform 的用户是什么?

python - 将带有 yield(string) 的 python 函数翻译成 C++

c# - 使用 Xamarin.Forms 和 Xamarin Studio 的基本存储

python - 为什么不能在递归函数中使用 yield

c# - TPL 和内存管理

c# - 向 .NET 控件添加新属性

python - "Functions that consume an entire iterable won' t 终止”?

ruby-on-rails - 使用 Mustache 参数的 Rails Yield

c# - 在 ASP.NET 中键入时显示搜索结果

c# - 为什么我不能将不可打印的字符定义为常量 c#