C#异步REST查询不工作:WaitAll或WhenAll与.Result组合挂起
我正在构建一个C#Winforms应用程序,需要处理许多REST调用。每次呼叫大约需要10秒,直到我收到应答,所以最后,我的应用程序运行了很长一段时间。大部分时间都花在等待REST服务应答上 我不会站出来,因为无论我尝试什么(configurewait、waitAll或whenAll),应用程序都会挂起,或者当我想访问每个任务结果时,它会返回到主方法或挂起。以下是我目前拥有的: 我正在建立任务列表以填充我的对象:C#异步REST查询不工作:WaitAll或WhenAll与.Result组合挂起,c#,rest,C#,Rest,我正在构建一个C#Winforms应用程序,需要处理许多REST调用。每次呼叫大约需要10秒,直到我收到应答,所以最后,我的应用程序运行了很长一段时间。大部分时间都花在等待REST服务应答上 我不会站出来,因为无论我尝试什么(configurewait、waitAll或whenAll),应用程序都会挂起,或者当我想访问每个任务结果时,它会返回到主方法或挂起。以下是我目前拥有的: 我正在建立任务列表以填充我的对象: 列表天数=新列表(); 对于(DateTime d=dtStart;d而言,您将此
列表天数=新列表();
对于(DateTime d=dtStart;d而言,您将此操作复杂化了
Task.whalll
是要走的路;它返回一个新的Task
,该任务在提供的任务全部完成时完成
它也是非阻塞的
通过等待任务返回的任务
。所有时,将其结果展开为一个数组:
List<Task<Day>> dayTasks = new();
// ...
Day[] days = await Task.WhenAll(dayTasks);
或者如果dc.colDays
没有AddRange
方法:
foreach (var day in days) dc.colDays.Add(day);
最好等待任何完成,并从列表中删除已完成的任务
while (days.Count > 0)
{
Task completedTask = await Task.WhenAny(days);
// Do something with result.
days.Remove(completedTask);
}
好像有点输入错误。应该是:Task.whall(dayTasks)
@TheTanic应该是,谢谢。太好了,谢谢你,乔纳森!
foreach (var day in days) dc.colDays.Add(day);
while (days.Count > 0)
{
Task completedTask = await Task.WhenAny(days);
// Do something with result.
days.Remove(completedTask);
}