gpt4 book ai didi

c# - 如何结合 TaskCompletionSource 和 CancellationTokenSource?

转载 作者:可可西里 更新时间:2023-11-01 07:43:01 27 4
gpt4 key购买 nike

我有这样的代码(此处已简化)等待完成任务:

var task_completion_source = new TaskCompletionSource<bool>();
observable.Subscribe(b =>
{
if (b)
task_completion_source.SetResult(true);
});
await task_completion_source.Task;

想法是订阅并等待 bool 值流中的 true。这完成了“任务”,我可以继续超越 await

但是我想取消 -- 但不是订阅,而是等待。我想将取消 token (以某种方式)传递给 task_completion_source,因此当我取消 token 源时,await 将继续。

怎么做?

更新:CancellationTokenSource 在这段代码之外,我这里只有来自它的 token 。

最佳答案

如果我理解正确的话,你可以这样做:

using (cancellationToken.Register(() => {
// this callback will be executed when token is cancelled
task_comletion_source.TrySetCanceled();
})) {
// ...
await task_comletion_source.Task;
}

请注意,它会在您的 await 上抛出异常,您必须处理该异常。

关于c# - 如何结合 TaskCompletionSource 和 CancellationTokenSource?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39897151/

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