foreach内部未等待异步调用

时间:2019-02-05 02:51:19

标签: c# async-await c#-5.0

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

代码

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 :(得分:2)

我的猜测是:

  1. 信息集合为空(长度为0),因此未执行foreach主体。
  2. 有人抛出了异常(也许在DoTask2或信息枚举器中),该异常跳到您的陷阱中,因此跳过了foreach正文。

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