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

c# – 处理CancellationTokenSource及其子CancellationTokenRegistration

CancellationTokenSource的dispose()是否也处理通过Token.Register()获得的任何子CancellationTokenRegistration对象?或者我必须单独处理每次注册吗?

例1:

async Task GoAsync(CancellationToken ct1,CancellationToken ct2)
{
    using (var cts = CancellationTokenSource.CreateLinkedTokenSource(ct1,ct2))
    {
        cts.Token.Register(() => Debug.Print("cancelled"),false)
        await Task.Delay(1000,cts.Token);
    }
}

例2:

async Task GoAsync(CancellationToken ct1,ct2))
    {
        using (cts.Token.Register(() => Debug.Print("cancelled"),false))
        {
            await Task.Delay(1000,cts.Token);
        }
    }
}

解决方法

the documentation所说的相反,您不会释放CancellationTokenRegistration来释放资源,而是为了使注册无效.也就是说,即使令牌被取消,您也不希望已注册的委托再次触发.

处理CancellationTokenSource时,意味着无法再取消关联的令牌.这意味着您可以确保注册的代表不会触发,因此在这种情况下没有理由处理注册.

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

相关推荐