Как отменить CancellationToken

Я запускаю задачу, которая запускает другие задачи и т.д.
Учитывая это дерево, если какая-либо задача не выполняется, результат всей операции бесполезен. Я рассматриваю использование токенов отмены. К моему удивлению, у токена нет метода CancelThisToken()...

Итак, мой вопрос: как я могу, ТОЛЬКО CancellationToken, отменить его?

Ответ 1

Как указано в документах, вам нужно вызвать метод отмены из исходного объекта. Пример кода включен в указанную вами ссылку. Вот соответствующие разделы:

// Define the cancellation token.
CancellationTokenSource source = new CancellationTokenSource();
previouslyProvidedToken = source.Token;
...
source.Cancel();

https://msdn.microsoft.com/en-us/library/system.threading.cancellationtoken(v=vs.110).aspx

Как я могу, обладая ТОЛЬКО аннулированиемToken, отменить его?

Без ссылки на источник вы не можете отменить токен. Это не означает, что вам нужен источник CancellationTokenSource, который сначала породил токен. Когда вы получаете токен, вы можете создать новый экземпляр источника токена, назначив его токен предоставленному токену и отмените его. Все остальные стороны, которые могут прочитать этот токен, будут видеть, что запрос был отменен.

Ответ 2

В качестве дополнения к ответам, предоставленным до сих пор, если вы хотите, чтобы экземпляр CancellationToken был предоставлен для ваших методов, и для внутренней отмены, вы должны изучить CancellationTokenSource.CreateLinkedTokenSource. По сути, это отменит либо при вызове cts.Cancel(), либо при вызове одного из предоставленных им токенов.

Ответ 3

Spawn CancellationВыберите экземпляры экземпляра CancellationTokenSource и вызовите Отменить на экземпляре CTS.

Пример: https://msdn.microsoft.com/en-us/library/dd321955(v=vs.110).aspx

Существует также способ изящно отменить потоки без их исключения, просто проверьте CT для IsCancellationRequested и обработайте это дело самостоятельно. Дополнительная информация: Использование свойства IsCancellationRequested?

Ответ 4

Знак, который дает вам право знать, что кто-то пытается что-то отменить. Это не дает вам права фактически сигнализировать об отмене. Только источник токена отмены дает вам это. Это по замыслу.