3

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

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

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

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

提前干杯!

4

1 回答 1

10

查看以下文档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
于 2013-10-11T12:13:30.030 回答