为什么CancellationToken
为BlockingCollection
未通过构造函数BlockingCollection
?BlockingCollection和CancellationToken通过
令牌必须传递到Take
和Add
方法,这是什么原因?
为什么CancellationToken
为BlockingCollection
未通过构造函数BlockingCollection
?BlockingCollection和CancellationToken通过
令牌必须传递到Take
和Add
方法,这是什么原因?
为什么使用ctor会更好?
我可以想象使用CancellationToken用于Take(),但不能用于Add()。
或使用不同的令牌。
CancellationToken用于支持“操作取消”。这是一个比布尔型字段含义为“活动/禁用”的对象实例更普遍的概念。它支持并发性,对象重用和其他有趣的场景。
因此,操作是Add()和Take(),并且由于集合为空或已满,每个操作都可以长时间运行。如果调用者想要选择取消长时间运行的方法调用,那么他们会传入令牌并在需要时发出信号。
感谢您的快速回答!有一个用于添加的标记,因为您可以指定集合的容量。添加到完整集合会阻止(这可以用令牌取消)。我认为有一个BlockingCollection构造函数带有一个用于所有Add和Take操作的令牌。我在问这个问题,因为我担心我可能会误解取消标记处理中的某些内容。 – thumbmunkeys 2010-11-18 13:20:49
它由使用模式驱动。使用1个标记添加和采取只会在少数情况下有用。 – 2010-11-18 13:26:47
好的,谢谢Henk! – thumbmunkeys 2010-11-18 13:28:07