使用task调试条件语句
本文关键字:语句 条件 调试 task 使用 | 更新日期: 2023-09-27 18:15:55
这个问题回答了我们如何通过超时异步等待任务完成。
我写了一个类似的异步方法,如下所示,检查当前值是否大于某个定义的阈值。
public async Task<bool> FindThreshold(CancellationTokenSource cts)
{
await Task.Run(()=> {
if (this.currentValue >= this.ThresholdValue) {
this.ThresholdFound = true;
} else {
this.ThresholdFound = false;
}
});
if (ThresholdFound)
return true;
else
return false;
}
基于给出的类似解决方案,我调用如下所示的函数,
var found = await FindThresholdAsyncAsync(cts);
if (await Task.WhenAny(task, Task.Delay(
TimeSpan.FromMilliseconds(Convert.ToDouble(timeout)*1000),
cts.Token) == found)
{
await found;
}
错误信息提示操作符"=="不能应用于'Task'和'bool'类型的操作数。我确实理解这个任务。延迟返回一个任务,但我不知道为什么它是在这里提到的解决方案的情况下工作。显然,我遗漏了一些东西,所以任何见解都将非常有帮助。
您不能等待FindThreshold
的结果。Task.WhenAny
接受任务列表并返回第一个要结束的任务。您必须将其与FindThreshold
返回的任务进行比较,以了解它是否超时。然后您可以检索结果。
var task = FindThreshold(cts);
if (await Task.WhenAny(task, Task.Delay(
TimeSpan.FromMilliseconds(Convert.ToDouble(timeout)*1000),
cts.Token)) == task)
{
var found = task.Result; // No need to await because we know the task is completed
}
else
{
// Timeout
}