通过阅读以下指南 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 秒,那么有什么问题,我如何同时运行它们并在所有任务都完成后继续?
答案 0 :(得分:1)
正如评论所指出的,使用 System.Threading.Thread.Sleep(5000)
代替 await Task.Delay(TimeSpan.FromSeconds(5));
。这将模拟在每个等待任务中执行 5 秒的 I/O(而不是 5 秒的 CPU 计算)。