加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 处理CancellationTokenSource及其子CancellationTokenRegi

发布时间:2020-12-16 01:57:40 所属栏目:百科 来源:网络整理
导读:CancellationTokenSource的Dispose()是否也处理通过Token.Register()获得的任何子CancellationTokenRegistration对象?或者我必须单独处理每次注册吗? 例1: async Task GoAsync(CancellationToken ct1,CancellationToken ct2){ using (var cts = Cancellat
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时,意味着无法再取消关联的令牌.这意味着您可以确保注册的代表不会触发,因此在这种情况下没有理由处理注册.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读