我正在尝试在执行一堆函数后处理抛出的异常。
我想将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
方法?
答案 0 :(得分:1)
在你的评论中,你说:
真正的控制台应用程序无效...
我猜你有这样的代码
original-master
这将导致异步代码启动,并且因为您不等待它结束,您的应用程序将立即关闭。所以当然你不会看到你的异常抛出,因为app已经关闭了。
试试这个:
public static void Main()
{
Send();
}
这将导致您的main方法结束,直到任务结束。
答案 1 :(得分:-1)
此代码确实捕获了异常。您只是在这样的控制台应用程序中运行它:
void Main() { Send(); }
主要退出并且在进行异常处理之前该过程终止。使用Send().Wait();
。