如何使用嵌套函数处理异步代码中的异常?
How to handle exceptions in the code async using nested functions?
我正在尝试处理在执行一堆函数后抛出的异常。
我想将 try/catch
块放在调用堆栈的顶部,抛出的异常是在由 Task.Run
方法创建的异步代码中。
我用来尝试处理代码的代码如下:
static async Task Send()
{
try
{
await SendEmailAsync();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
static Task<Boolean> SendEmailAsync()
{
return Task.Run(() =>
SendEmail());
}
static Boolean SendEmail()
{
throw new Exception("message of exception");
}
什么形式最好处理Exception
方法中抛出的SendEmail
,让处理变成Send
方法?
此代码确实捕获了异常。你只是 运行 它在这样的控制台应用程序中:
void Main() { Send(); }
Main 退出并且进程终止,然后才能进行异常处理。使用 Send().Wait();
.
在你的评论中你说:
In the real console app is not working...
我猜你有这样的代码
public static void Main()
{
Send();
}
这将导致异步代码启动,并且因为您没有等待它结束,所以您的应用会立即关闭。所以你当然不会看到你的异常抛出,因为应用程序已经关闭。
试试这个:
public static void Main()
{
Send().Wait();
}
这将导致您的主要方法直到任务结束。
我正在尝试处理在执行一堆函数后抛出的异常。
我想将 try/catch
块放在调用堆栈的顶部,抛出的异常是在由 Task.Run
方法创建的异步代码中。
我用来尝试处理代码的代码如下:
static async Task Send()
{
try
{
await SendEmailAsync();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
static Task<Boolean> SendEmailAsync()
{
return Task.Run(() =>
SendEmail());
}
static Boolean SendEmail()
{
throw new Exception("message of exception");
}
什么形式最好处理Exception
方法中抛出的SendEmail
,让处理变成Send
方法?
此代码确实捕获了异常。你只是 运行 它在这样的控制台应用程序中:
void Main() { Send(); }
Main 退出并且进程终止,然后才能进行异常处理。使用 Send().Wait();
.
在你的评论中你说:
In the real console app is not working...
我猜你有这样的代码
public static void Main()
{
Send();
}
这将导致异步代码启动,并且因为您没有等待它结束,所以您的应用会立即关闭。所以你当然不会看到你的异常抛出,因为应用程序已经关闭。
试试这个:
public static void Main()
{
Send().Wait();
}
这将导致您的主要方法直到任务结束。