在异步编程的async/await模式下,将await表达式放在try语句之内,和平时的效果是一致的。例如:
class Program
{
static void Main(string[] args)
{
Task t = BadAsync();
t.Wait();
Console.WriteLine("Task Status: {0}", t.Status);
Console.WriteLine("Task IsFaulted: {0}", t.IsFaulted);
}
static async Task BadAsync()
{
try
{
await Task.Run(() => { throw new Exception(); });
}
catch
{
Console.WriteLine("Exception in BadAsync");
}
}
}
代码运行的结果如下:
Exception in BadAsync
Task Status: RanToCompletion
Task IsFaulted: False
注意,尽管Task抛出了一个Excption,在Main的最后,Task的状态仍然为RanToCompletion。原因是Task并没有被取消,同时也没有未处理的异常。类似地,IsFaulted的属性为False。
网友评论