using System;
using System.Threading.Tasks;
public class Program
{
public static void Main()
{
var p = new Program();
p.Loop();
}
public async void Loop()
{
for (int i = 0; i < 5; ++i)
{
try
{
Console.WriteLine(i);
var result = await SomeTask();
Console.WriteLine(result);
}
catch (Exception)
{
Console.WriteLine("Error" + i);
}
}
}
public async Task<string> SomeTask()
{
await Task.Delay(1);
throw new Exception();
return "Result";
}
}
输出
0
Error0
1
我希望输出更像这样:
0
Error0
1
Error2
2
Error2
3
Error4
4
为什么它在0之后停止?
答案 0 :(得分:2)
您不是在等待async
操作完成,因此应用程序在操作有机会完成之前就结束了。
您不应该在事件处理程序之外使用async void
。 async void
没有返回等待,因此调用方法只是继续(并退出应用程序)。您应该返回Task
和await
(或Main
使用Task.Wait
的情况):
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