如何使用嵌套函数处理代码异步中的异常
本文关键字:异步 异常 代码 处理 何使用 嵌套 函数 | 更新日期: 2023-09-27 18:11:40
我试图处理抛出的异常,在执行一堆函数后。我想把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");
}
用SendEmail
法处理抛入的Exception
,使处理成为Send
法的最佳形式是什么?
在你的评论中你说:
在真正的控制台应用程序不工作…
我猜你有这样的代码
public static void Main()
{
Send();
}
这将导致异步代码启动,因为你没有等待它结束,你的应用程序立即关闭。所以你当然不会看到异常抛出,因为app已经关闭了。
试试这个:
public static void Main()
{
Send().Wait();
}
这将导致你的main方法直到任务结束
这段代码捕获了异常。您只需在控制台应用程序中运行它,如下所示:
void Main() { Send(); }
Main退出,进程在异常处理发生之前终止。使用Send().Wait();