gpt4 book ai didi

c# - 即使队列为空,queue.IsCompleted 也会返回 false?

转载 作者:行者123 更新时间:2023-12-02 11:24:59 25 4
gpt4 key购买 nike

以下代码永远不会返回。调试显示,即使队列为空,queue.IsCompleted 也会返回 false。我错过了什么吗?

var workers = new Task[1];
using (var queue = new BlockingCollection<QueuePayload>(20))
{
workers[0] = Task.Run(() => Consume(queue));
queue.Add(new QueuePayload{....});
Task.WaitAll(workers);
}

void Consume(BlockingCollection<QueuePayload> queue))
{
while (!queue.IsCompleted)
{
var i = new QueuePayload();
try
{
i = queue.Take();
}
catch (InvalidOperationException)
{
break;
}
......

最佳答案

https://msdn.microsoft.com/en-us/library/dd267315(v=vs.110).aspx 处的 IsCompleted 属性有以下文本:

Whether this collection has been marked as complete for adding and is empty.

您在哪里将集合标记为已完成?这不是一张空支票 - 这是一张带有手动附加开关的空支票。

相应地,有一个 CompleteAdding() 方法来标记不再添加任何项目。

关于c# - 即使队列为空,queue.IsCompleted 也会返回 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37260210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com