Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 捕获循环中的异步错误_C#_.net_Loops_Error Handling_Async Await - Fatal编程技术网

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