处置CancellationTokenSource及其子CancellationTokenRegistration

时间:2013-10-10 02:39:27

标签: c# .net task-parallel-library async-await cancellationtokensource

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);
    }
}

1 个答案:

答案 0 :(得分:7)

the documentation所说的相反,您不会释放CancellationTokenRegistration来释放资源,而是为了使注册无效。也就是说,即使令牌被取消,您也不希望已注册的代理人再次开火。

当您处置CancellationTokenSource时,表示无法再取消关联的令牌。这意味着您可以确定注册的代表不会被激活,因此在这种情况下没有理由处理注册。