2

鉴于:

  • BlockingCollection<T> coll
  • CancellationTokenSource cts
  • 10 个线程被阻塞coll.GetConsumingEnumerable(cts.Token)

所以cts.Cancel()取消了所有 10 个线程。

是否可以编写一个自定义取消令牌源,可以告诉它只取消一些线程?所以:

cts.Cancel(5)

只会取消 5 个被阻塞的线程。任意 5。

?

4

1 回答 1

3

不,您需要使用多个不同的取消令牌,让每个消费者使用自己的令牌,并取消一些令牌集合。

也就是说,您可以通过创建某种取消令牌集合来封装大部分这种行为,该集合具有生成新令牌的方法和另一个取消它发出的某些令牌的方法。

于 2014-09-03T19:24:07.757 回答