使用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'类型的操作数。我确实理解这个任务。延迟返回一个任务,但我不知道为什么它是在这里提到的解决方案的情况下工作。显然,我遗漏了一些东西,所以任何见解都将非常有帮助。

使用task调试条件语句

您不能等待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
}