私は次のコードを持っています:
private void ProcessQueue()
{
foreach (MessageQueueItem item in GetNextQueuedItem())
PerformAction(item);
}
private IEnumerable<MessageQueueItem> GetNextQueuedItem()
{
if (_messageQueue.Count > 0)
yield return _messageQueue.Dequeue();
}
ProcessQueue が呼び出されると、最初はキューに 1 つの項目があります。PerformAction 中に、_messageQueue にさらに項目を追加します。ただし、foreach ループは最初の項目の後に終了し、後続の項目が追加されたことを認識しません。
どういうわけか、キューの初期状態がyieldによってキャプチャされているように感じます。
誰かが何が起こっているのかを説明し、解決策を提供できますか?