C#异步REST查询不工作:WaitAll或WhenAll与.Result组合挂起

C#异步REST查询不工作:WaitAll或WhenAll与.Result组合挂起,c#,rest,C#,Rest,我正在构建一个C#Winforms应用程序,需要处理许多REST调用。每次呼叫大约需要10秒,直到我收到应答,所以最后,我的应用程序运行了很长一段时间。大部分时间都花在等待REST服务应答上 我不会站出来,因为无论我尝试什么(configurewait、waitAll或whenAll),应用程序都会挂起,或者当我想访问每个任务结果时,它会返回到主方法或挂起。以下是我目前拥有的: 我正在建立任务列表以填充我的对象: 列表天数=新列表(); 对于(DateTime d=dtStart;d而言,您将此

我正在构建一个C#Winforms应用程序,需要处理许多REST调用。每次呼叫大约需要10秒,直到我收到应答,所以最后,我的应用程序运行了很长一段时间。大部分时间都花在等待REST服务应答上

我不会站出来,因为无论我尝试什么(configurewait、waitAll或whenAll),应用程序都会挂起,或者当我想访问每个任务结果时,它会返回到主方法或挂起。以下是我目前拥有的:

我正在建立任务列表以填充我的对象:

列表天数=新列表();

对于(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);
    }