如何取消 CancellationToken
How to cancel a CancellationToken
我启动一个任务,然后启动其他任务等等。给定那棵树,如果任何任务失败,则整个操作的结果都是无用的。我正在考虑使用取消令牌。令我惊讶的是,令牌没有“CancelThisToken()”方法...
我只有一个CancellationToken,如何取消它?
从 CancellationTokenSource
实例生成 CancellationToken
个实例,并在 CTS 实例上调用 Cancel
。
示例:Cancel()
还有一种方法可以在不引发异常的情况下优雅地取消线程。查一下CT有没有IsCancellationRequested
,自己处理。
更多信息:Use of IsCancellationRequested property?
如文档所述,您需要从源对象调用 cancel 方法。示例代码包含在您提供的 link 中。以下是相关部分:
// Define the cancellation token.
CancellationTokenSource source = new CancellationTokenSource();
previouslyProvidedToken = source.Token;
...
source.Cancel();
how can I, in possession of only a CancellationToken, cancel it?
编辑: 我几年前写了这篇文章并重新访问它我不知道它是否真的有效,无论是在写的时候还是现在。留在这里留给子孙后代。
如果不参考来源,您将无法取消令牌。这并不意味着您需要首先生成令牌的 CancellationTokenSource
。当给定 CancellationToken
时,您可以创建令牌源的新实例,将其令牌分配给提供的令牌,然后取消它。可以读取此令牌的所有其他方将看到已请求取消它。
作为迄今为止提供的答案的扩展,如果您希望同时为您的方法提供 CancellationToken
实例, 和 在内部取消,您应该检查CancellationTokenSource.CreateLinkedTokenSource
。
本质上,这将在调用 cts.Cancel()
或它提供的标记之一时取消。
令牌让您有权知道有人试图取消某事。它并没有赋予您实际发出取消信号的权利。只有取消令牌源可以为您提供。这是设计使然。
我启动一个任务,然后启动其他任务等等。给定那棵树,如果任何任务失败,则整个操作的结果都是无用的。我正在考虑使用取消令牌。令我惊讶的是,令牌没有“CancelThisToken()”方法...
我只有一个CancellationToken,如何取消它?
从 CancellationTokenSource
实例生成 CancellationToken
个实例,并在 CTS 实例上调用 Cancel
。
示例:Cancel()
还有一种方法可以在不引发异常的情况下优雅地取消线程。查一下CT有没有IsCancellationRequested
,自己处理。
更多信息:Use of IsCancellationRequested property?
如文档所述,您需要从源对象调用 cancel 方法。示例代码包含在您提供的 link 中。以下是相关部分:
// Define the cancellation token.
CancellationTokenSource source = new CancellationTokenSource();
previouslyProvidedToken = source.Token;
...
source.Cancel();
how can I, in possession of only a CancellationToken, cancel it?
编辑: 我几年前写了这篇文章并重新访问它我不知道它是否真的有效,无论是在写的时候还是现在。留在这里留给子孙后代。
如果不参考来源,您将无法取消令牌。这并不意味着您需要首先生成令牌的 CancellationTokenSource
。当给定 CancellationToken
时,您可以创建令牌源的新实例,将其令牌分配给提供的令牌,然后取消它。可以读取此令牌的所有其他方将看到已请求取消它。
作为迄今为止提供的答案的扩展,如果您希望同时为您的方法提供 CancellationToken
实例, 和 在内部取消,您应该检查CancellationTokenSource.CreateLinkedTokenSource
。
本质上,这将在调用 cts.Cancel()
或它提供的标记之一时取消。
令牌让您有权知道有人试图取消某事。它并没有赋予您实际发出取消信号的权利。只有取消令牌源可以为您提供。这是设计使然。