gpt4 book ai didi

c# - 使用 Task.WhenAny 计算超时时如何获取任务结果

转载 作者:行者123 更新时间:2023-12-03 23:19:14 43 4
gpt4 key购买 nike

我需要为移动应用程序中的任务调用添加超时功能。我尝试使用 Task.WhenAny 来完成此操作,如下所示。这将返回首先完成的任务。我的问题是,最初我是从这个任务中获取返回值的,如果任务没有超时,我仍然需要它。

Task task = restService.GetRequestAsync(articleAdr, articleParams);
var response = await Task.WhenAny(task, Task.Delay(1000, cts.Token));

响应只是首先完成的任务。我如何得到它的结果?

最佳答案

对于这种情况,我可以想到三种不同的可能性。

前两个可以在 Peter Bons' answer 中找到.

第三个是存储你的两个任务然后检查 await Task.WhenAny() 之后的状态完成了。

var workerTask = restService.GetRequestAsync(articleAdr, articleParams);
var cancellationTask = Task.Delay(1000, cts.Token);

await Task.WhenAny(workerTask, cancellationTask);
if (workerTask.Status == TaskStatus.RanToCompletion)
{
// Note that this is NOT a blocking call because the Task ran to completion.
var response = workerTask.Result;

// Do whatever work with the completed result.
}
else
{
// Handle the cancellation.
// NOTE: You do NOT want to call workerTask.Result here. It will be a blocking call and will block until
// your previous method completes, especially since you aren't passing the CancellationToken.
}

关于c# - 使用 Task.WhenAny 计算超时时如何获取任务结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41924830/

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