任务异步编程同步运行

时间:2021-02-02 21:47:56

标签: c# asynchronous task

通过阅读以下指南 https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/,我试图创建三个应该异步运行的任务,但它们实际上是同步运行的。我想知道我错在哪里

Task<double?[]> rainfallGridValuesTask = Rainfall.ValuesAsync(rainfallGridValuesRepo.GetAll());  //it takes 5s
Task<double?[]> rainfallAvgValuesTask = Rainfall.AveragesAsync(rainfallAvgGridValuesRepo.GetAll());  //it takes 5s
Task<double?[][]> rainfallAnomaliesTask = Rainfall.AnomaliesAsync(rainfallGridValuesRepo.GetAll());  //it takes 5s

方法如下:

public static async Task<double?[]> Values(IQueryable<RainfallGridValue> rainfallGridValues)
{
    double?[] outputValues = new double?[108];

    System.Threading.Thread.Sleep(5000);  //Simulate the time taken by the method
    return outputValues;
}

然后我尝试通过这种方式获取任务返回的值:

rainfallValueChart.Data = await rainfallGridValuesTask;
rainfallAverageChart.Data = await rainfallAvgValuesTask ;
rainfallAnomalyChart.Data = await rainfallAnomaliesTask ;

但是当我运行这段代码时,它在三个 Async 方法中的每一个上都等待 5 秒,那么有什么问题,我如何同时运行它们并在所有任务都完成后继续?

1 个答案:

答案 0 :(得分:1)

正如评论所指出的,使用 System.Threading.Thread.Sleep(5000) 代替 await Task.Delay(TimeSpan.FromSeconds(5));。这将模拟在每个等待任务中执行 5 秒的 I/O(而不是 5 秒的 CPU 计算)。