gpt4 book ai didi

c# - 链接取消 token

转载 作者:IT王子 更新时间:2023-10-29 04:10:57 26 4
gpt4 key购买 nike

我使用传递的取消 token ,以便可以干净地关闭我的服务。该服务具有不断尝试连接到其他服务的逻辑,因此 token 是打破这些在单独线程中运行的重试循环的好方法。我的问题是我需要调用具有内部重试逻辑的服务,但如果重试失败,则在设定的时间段后返回。我想创建一个带有超时的新取消 token ,它将为我执行此操作。这个问题是我的新 token 没有链接到“主” token ,所以当主 token 被取消时,我的新 token 将仍然存在,直到它超时或建立连接并返回。我想做的是将两个 token 链接在一起,这样当主 token 被取消时,我的新 token 也会被取消。我尝试使用 CancellationTokenSource.CreateLinkedTokenSource 方法,但是当我的新 token 超时时,它也取消了主 token 。有没有办法用 token 做我需要做的事情,或者它是否需要更改重试逻辑(可能无法轻易做到这一点)

这是我想做的:

主 token ——传递各种功能,以便服务可以干净地关闭。临时 token ——传递给单个函数并设置为一分钟后超时

如果主 token 被取消,临时 token 也必须被取消。

当临时 token 过期时,它不得取消主 token 。

最佳答案

您想使用 CancellationTokenSource.CreateLinkedTokenSource。它允许有一个“父”和一个“子”CancellationTokenSourcees。这是一个简单的例子:

var parentCts = new CancellationTokenSource();
var childCts = CancellationTokenSource.CreateLinkedTokenSource(parentCts.Token);

childCts.CancelAfter(1000);
Console.WriteLine("Cancel child CTS");
Thread.Sleep(2000);
Console.WriteLine("Child CTS: {0}", childCts.IsCancellationRequested);
Console.WriteLine("Parent CTS: {0}", parentCts.IsCancellationRequested);
Console.WriteLine();

parentCts.Cancel();
Console.WriteLine("Cancel parent CTS");
Console.WriteLine("Child CTS: {0}", childCts.IsCancellationRequested);
Console.WriteLine("Parent CTS: {0}", parentCts.IsCancellationRequested);

预期的输出:

Cancel child CTS
Child CTS: True
Parent CTS: False

Cancel parent CTS
Child CTS: True
Parent CTS: True

关于c# - 链接取消 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29623178/

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