我开始一个任务,然后开始其他任务等等。鉴于该树,如果任何任务失败,则整个操作的结果将毫无用处。我正在考虑使用取消令牌。令我惊讶的是,令牌没有“CancelThisToken()”方法......
我怎样才能只拥有一个CancellationToken来取消它?
我开始一个任务,然后开始其他任务等等。鉴于该树,如果任何任务失败,则整个操作的结果将毫无用处。我正在考虑使用取消令牌。令我惊讶的是,令牌没有“CancelThisToken()”方法......
我怎样才能只拥有一个CancellationToken来取消它?
如文档所述,您需要从源对象调用取消方法。示例代码包含在您提供的链接中。以下是相关部分:
// Define the cancellation token.
CancellationTokenSource source = new CancellationTokenSource();
previouslyProvidedToken = source.Token;
...
source.Cancel();
我怎样才能只拥有一个 CancellationToken 取消它?
编辑:我在几年前写了这篇文章并重新审视它,我不知道它在写作时或现在是否真的有效。将其原样留在这里以供后代使用。
如果没有对源的引用,您将无法取消令牌。这并不意味着您需要CancellationTokenSource
首先生成令牌的那个。当给定 aCancellationToken
时,您可以创建令牌源的新实例,将其令牌分配给提供的令牌,然后取消它。可以读取此令牌的所有其他方将看到已请求取消它。
作为迄今为止提供的答案的扩展,如果您想为CancellationToken
您的方法提供一个实例并在内部取消,您应该检查CancellationTokenSource.CreateLinkedTokenSource
. 本质上,这将在cts.Cancel()
被调用时取消,或者它提供的令牌之一被取消。
令牌使您有权知道有人试图取消某事。它不赋予您实际发出取消信号的权利。只有取消令牌源才能为您提供。这是设计使然。
CancellationToken
从实例生成CancellationTokenSource
实例并调用CTSCancel
实例。
示例:取消()
还有一种方法可以优雅地取消线程而不触发异常。只需检查 CTIsCancellationRequested
并自行处理此案。