BlockingCollection.IsComplete永远不会成立

时间:2016-09-03 13:20:48

标签: .net c#-4.0 producer-consumer blockingcollection

.NET BlockingCollection类对我来说非常有用,但由于某种原因,即使BlockingCollection.Count为0,IsCompleted属性也总是返回false。

while (!WorkUnits.IsCompleted)
{
   ... 
   // WorkUnits.Count == 0 but IsCompleted stays false
}

作为一种解决方法,我可以通过这种方式摆脱我的外部(!blockingCollection.IsComplete)循环:

if (WorkUnits.Count == 0 )
{
    break;
}

这样可行,但是对于看起来应该已经有效的东西增加了膨胀,但我怀疑我可能不会很好地理解IsComplete以正确利用它。

修改

谢谢,迈克和斯科特!我将您的建议折叠起来并创建了一个新的公共GitHub项目GhostLine

1 个答案:

答案 0 :(得分:4)

如果您阅读size_hint: None, Nonehttps://msdn.microsoft.com/en-us/library/dd267312(v=vs.110).aspx)的文档,您会找到以下信息:

  

生产线程可以调用CompleteAdding方法来指示不再添加任何项目。消费者监视IsCompleted属性以了解集合何时为空并且不再添加任何项目。

那么,你有没有调用BlockingCollection