取消令牌 - 在请求取消后注册处理程序
本文关键字:注册 处理 程序 取消后 请求 令牌 取消 | 更新日期: 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