取消令牌 - 在请求取消后注册处理程序

本文关键字:注册 处理 程序 取消后 请求 令牌 取消 | 更新日期: 2023-09-27 18:35:08

在没有构建快速测试台的情况下;我想我会很快问SO,看看是否有人知道这个答案。

此外,它可能还有一个额外的好处,即通知可能遇到类似情况的其他用户。

假设我有一个长期存在的 CancelTokenSource,其中有许多不同的组件在 CancelToken 上注册处理程序。

如果请求取消并且所有已注册的回调都被调用,然后在此之后注册另一个处理程序;在注册点是否仍会为该新回调触发取消回调?

提前干杯!

取消令牌 - 在请求取消后注册处理程序

查看CancellationToken.Register的文档:

如果此令牌已处于已取消状态,则委托将是 立即同步运行。委托的任何异常 生成将从此方法调用中传播出来。

当前的 ExecutionContext(如果存在)将与 委托,将在执行时使用。

请考虑以下事项:

void RegisterBeforeCancel(CancellationToken token)
{
    token.Register(() => Console.WriteLine("Before cancel"));
}
void RegisterAfterCancel(CancellationToken token)
{
    token.Register(() => Console.WriteLine("After cancel"));
}
var cts = new CancellationTokenSource();
RegisterBeforeCancel(cts.Token);
cts.Cancel();
RegisterAfterCancel(cts.Token);

输出将显示:

Before cancel
After cancel