ca9*_*3d9 2 c# blockingqueue task-parallel-library
以下代码永远不会返回。调试表明,即使队列为空, 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;
}
......
Run Code Online (Sandbox Code Playgroud)
小智 5
该物业IsCompleted在https://msdn.microsoft.com/en-us/library/dd267315(v=vs.110).aspx有如下文字:
此集合是否已标记为已完成添加且为空。
您在哪里将集合标记为已完成?这不是一张空支票——它是一张带有手动附加开关的空支票。
因此,有一种CompleteAdding()方法可以标记不再添加更多项目。
| 归档时间: |
|
| 查看次数: |
1231 次 |
| 最近记录: |