gpt4 book ai didi

c# - 处置 CancellationTokenSource 及其子 CancellationTokenRegistration

转载 作者:行者123 更新时间:2023-12-02 07:33:18 27 4
gpt4 key购买 nike

CancellationTokenSourceDispose() 是否也会处理通过 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, CancellationToken ct2)
{
using (var cts = CancellationTokenSource.CreateLinkedTokenSource(ct1, ct2))
{
using (cts.Token.Register(() => Debug.Print("cancelled"), false))
{
await Task.Delay(1000, cts.Token);
}
}
}

最佳答案

the documentation相反也就是说,您不会处置 CancellationTokenRegistration 来释放资源,您这样做是为了使注册无效。也就是说,即使 token 被取消,您也不想再触发已注册的委托(delegate)。

当您处置CancellationTokenSource时,意味着关联的 token 无法再被取消。这意味着您可以确定注册的委托(delegate)不会触发,因此在这种情况下没有理由处置注册。

关于c# - 处置 CancellationTokenSource 及其子 CancellationTokenRegistration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19286146/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com