在没有搭建快速试验台的情况下;我想我会很快问 SO 看看是否有人知道这个答案。
此外,它还可能具有通知可能遇到类似情况的其他用户的额外好处。
假设我有一个长期存在的 CancellationTokenSource,其中有许多不同的组件在 CancellationToken 上注册处理程序。
如果请求取消并且注册的回调都被调用,然后在该点之后注册另一个处理程序;取消回调是否仍然会在注册时为该新回调触发?
提前干杯!
在没有搭建快速试验台的情况下;我想我会很快问 SO 看看是否有人知道这个答案。
此外,它还可能具有通知可能遇到类似情况的其他用户的额外好处。
假设我有一个长期存在的 CancellationTokenSource,其中有许多不同的组件在 CancellationToken 上注册处理程序。
如果请求取消并且注册的回调都被调用,然后在该点之后注册另一个处理程序;取消回调是否仍然会在注册时为该新回调触发?
提前干杯!
查看以下文档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