【发布时间】:2021-06-30 10:04:31
【问题描述】:
我正在尝试将以下方法转换为并行运行:
List<(DateTime start, DateTime end)> dates = CreateDateListTuple();
foreach ((DateTime start, DateTime end) date in dates)
{
dBInfos.Add(await GetDBInfo(date.start, date.end));
}
我试图尝试的是首先创建一个任务列表:
List<Task<DBInfo>> parallelTasks = new List<Task<>>;
foreach((DateTime start,DateTime end) date in dates)
{
parallelTasks.Add(GetDBInfo(date.start, date.end));
}
然后并行运行这些任务:
var continuation = await Task.WhenAll(parallelTasks.ToArray());
continuation.Wait();
然后将结果添加到集合中:
foreach (var result in continuation.Result)
{
dBInfos.Add(result);
}
会发生什么,是程序冻结在
continuation.Wait();
命令,不抛出任何异常。实施可能有什么问题?
【问题讨论】:
-
Task.WhenAll能够在调用Task.WhenAll<Result>(...)Task.WhenAll() 时返回Task<TResult[]>(dotnet 5) -
我已根据此信息更新问题,谢谢!
-
continuation变量的类型是什么?为什么.Wait()?为什么.Result? Don't block on async code.
标签: c# asynchronous async-await observablecollection