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 循环外部调用,则会按预期等待这些函数。
谁能给点建议?
我的猜测是:
- 信息集合为空(0 长度),因此没有执行 foreach 主体。
- 有人抛出异常(可能在 DoTask2 或信息枚举器中),它跳转到您的捕获点,从而跳过 foreach 主体。
为了验证这一点,运行 它在调试器下或添加一些 Console.WriteLines()。
在我的 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 循环外部调用,则会按预期等待这些函数。
谁能给点建议?
我的猜测是:
- 信息集合为空(0 长度),因此没有执行 foreach 主体。
- 有人抛出异常(可能在 DoTask2 或信息枚举器中),它跳转到您的捕获点,从而跳过 foreach 主体。
为了验证这一点,运行 它在调试器下或添加一些 Console.WriteLines()。