[英]Catching an exception in an async method
我正在尝试更加熟悉异步/等待编程和异常处理。
static void Main(string[] args)
{
TestAsyncException();
}
private static async void TestAsyncException()
{
try
{
var result = await Task.Factory.StartNew(() => DoSomething());
//do something with the result
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
private static int DoSomething()
{
throw new Exception("Exception was thrown!");
}
我期望可以很好地处理Exception
,但是代码执行停止了,我得到了
..中发生类型'System.Exception'的异常,但未在用户代码中处理。
但是,当我继续执行代码时,实际上捕获了Exception
(并且消息显示在Console
)。
我应该如何在不中断代码执行的Exception
下捕获Exception
?
首先,处理您的异常。 我相信您会看到代码停止执行并显示错误,因为您将Break When Thrown
”。 检查您的例外窗口( Debug -> Windows -> Exception Settings
Windows- Debug -> Windows -> Exception Settings
)。
当您在async
方法上使用void
的返回类型时,您将无法从该方法获取任何类型的信息-这是一劳永逸的事情。 除特殊情况外,这是不好的做法。 始终让您的异步方法返回Task
或Task<T>
:
private static async Task TestAsyncException()
现在,您的主要方法可以监听任务:
static void Main(string[] args)
{
TestAsyncException().Wait(); // or whatever you want to do with the task
Console.Read();
}
通常,您可以在这里使用await
来取消任务的包装,但这在应用程序入口点是不允许的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.