Dispose()
的{{1}}是否也会处置通过CancellationTokenSource
获得的所有子CancellationTokenRegistration
个对象?或者我必须单独处理每次注册吗?
示例1:
Token.Register()
示例2:
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);
}
}
答案 0 :(得分:7)
与the documentation所说的相反,您不会释放CancellationTokenRegistration
来释放资源,而是为了使注册无效。也就是说,即使令牌被取消,您也不希望已注册的代理人再次开火。
当您处置CancellationTokenSource
时,表示无法再取消关联的令牌。这意味着您可以确定注册的代表不会被激活,因此在这种情况下没有理由处理注册。