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时,意味着无法再取消关联的令牌.这意味着您可以确保注册的代表不会触发,因此在这种情况下没有理由处理注册. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |