C# 捕获循环中的异步错误
我希望输出更像这样:C# 捕获循环中的异步错误,c#,.net,loops,error-handling,async-await,C#,.net,Loops,Error Handling,Async Await,我希望输出更像这样: 0 Error0 1 为什么它会在0之后停止?您没有等待异步操作完成,因此应用程序会在操作有机会完成之前结束 您不应该在事件处理程序之外使用async voidasync void不会返回可等待的,因此调用方法只是继续(并退出应用程序)。您应该返回任务并等待它(或者在Main的情况下使用Task.Wait): 因此,使用Main方法中的wait,程序将退出,因为尽管Main被暂停,Main仍然返回到其调用者(我假设这是公共语言运行库。)结果:LoopAsync无法完成,因
0
Error0
1
为什么它会在0之后停止?您没有等待
异步操作完成,因此应用程序会在操作有机会完成之前结束
您不应该在事件处理程序之外使用async void
async void
不会返回可等待的,因此调用方法只是继续(并退出应用程序)。您应该返回任务
并等待它(或者在Main
的情况下使用Task.Wait
):
因此,使用Main
方法中的wait
,程序将退出,因为尽管Main
被暂停,Main
仍然返回到其调用者(我假设这是公共语言运行库。)结果:LoopAsync
无法完成,因为CLR已停止承载它(或类似的东西)此处的详细信息:@ShaunLuttin您只能在async
方法中使用wait
,而Main
不能使用。这就是为什么您需要使用Wait
。当您不等待时,您同步运行LoopAsync
,直到它到达第一个wait
,然后它返回调用方,即Main
,该调用方结束并退出应用程序。
0
Error0
1
0
Error0
1
Error2
2
Error2
3
Error4
4
public static void Main()
{
var p = new Program();
p.LoopAsync().Wait();
}
public async Task LoopAsync()
{
for (int i = 0; i < 5; ++i)
{
try
{
Console.WriteLine(i);
var result = await SomeTask();
Console.WriteLine(result);
}
catch (Exception)
{
Console.WriteLine("Error" + i);
}
}
}
0
Error0
1
Error1
2
Error2
3
Error3
4
Error4