foreach 内部未等待异步调用

async calls not awaited inside foreach

在我的 C# 代码中,并不是每次都等待来自 for each 内部的异步调用。

代码

private async Task GetCardInfo()
{
  try
  {
     var result = await DoTask1();
     var info = await DoTask2();
     foreach (var inf in info)
     {
        await DoTask3();
     }
   }
   catch (Exception ex){ }
}

DoTask1();DoTask2(); 总是在等待,但 DoTask3(); 有时会被等待,有时却不会。我认为问题出在 DoTask3(); 但如果我将 DoTask1(); 放在 foreach 循环中,我会遇到类似的问题。我做错了什么吗?

仅当从 foreach 循环内部调用时才会出现此问题,如果从 foreach 循环外部调用,则会按预期等待这些函数。

谁能给点建议?

我的猜测是:

  1. 信息集合为空(0 长度),因此没有执行 foreach 主体。
  2. 有人抛出异常(可能在 DoTask2 或信息枚举器中),它跳转到您的捕获点,从而跳过 foreach 主体。

为了验证这一点,运行 它在调试器下或添加一些 Console.WriteLines()。