将完成添加以唤醒已被阻塞的线程

时间:2011-05-07 03:58:09

标签: c# .net

如果消费者已被take()阻止,生产者的completeAdding会将其唤醒吗?使用BlockingCollection。 MSDN没有明确说明。

2 个答案:

答案 0 :(得分:2)

没有

快速实验表明它将在Take()方法中抛出InvalidOperation异常。

这是有道理的:

int value = data.Take();

当线程/任务刚刚“唤醒”而没有任何数据返回时,value会是什么?

如果您被TryTake(out x)屏蔽,则在添加完成后,它将以false返回。

答案 1 :(得分:0)

我对BlockingCollections不太熟悉,但总的来说,我的理解是,如果某些东西被阻止,它就不会被第三方“吵醒”。