微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – CancellationToken – 请求取消后注册处理程序

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

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

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

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

提前干杯!

解决方法

看一下 CancellationToken.Register的文档:

If this token is already in the canceled state,the delegate will be
run immediately and synchronously. Any exception the delegate
generates will be propagated out of this method call.

The current ExecutionContext,if one exists,will be captured along with the
delegate and will be used when executing it.

考虑以下:

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐