.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。
答案 0 :(得分:4)
如果您阅读size_hint: None, None
(https://msdn.microsoft.com/en-us/library/dd267312(v=vs.110).aspx)的文档,您会找到以下信息:
生产线程可以调用CompleteAdding方法来指示不再添加任何项目。消费者监视IsCompleted属性以了解集合何时为空并且不再添加任何项目。
那么,你有没有调用BlockingCollection
?