将完成添加以唤醒已被阻止的线程,取消
问题描述:
在消费者已被take()阻止的情况下,生产者的completeAdding会将其唤醒吗?使用BlockingCollection。 MSDN没有说清楚。将完成添加以唤醒已被阻止的线程,取消
答
号快速实验表明它会在采取()方法抛出InvalidOperation异常。
这是有道理的:
int value = data.Take();
什么会value
是当线程/任务也只是“唤醒”没有任何数据返回?
如果您被TryTake(out x)
阻止,则在添加完成时它将返回false
。
答
我对BlockingCollections并不是很熟悉,但总的来说,我的理解是,如果有东西被阻塞,它不会被第三方“唤醒”。