2

Дано:Возможно ли иметь источник токена отмены, который отменяет только некоторых официантов?

  • BlockingCollection<T> coll
  • CancellationTokenSource cts
  • 10 нитей заблокированы на coll.GetConsumingEnumerable(cts.Token)

Так cts.Cancel() отменяет все 10 потоков.

Возможно ли создать пользовательский источник токена аннулирования, который может быть отменен только для некоторых потоков? Таким образом:

cts.Cancel(5) 

отменит только 5 заблокированных потоков. Любые 5.

?

ответ

3

Нет. Вместо этого вам нужно иметь несколько разных токенов отмены, чтобы каждый из потребителей использовал свой собственный токен и отменил некоторый номер коллекции токенов.

Сообщалось, что вы можете инкапсулировать большую часть этого поведения, создав коллекцию маркеров отмены, которая имеет метод генерации нового токена, а другой - для отмены некоторого количества выданных токенов.