如何使用嵌套函数处理代码异步中的异常?

时间:2015-09-08 14:37:40

标签: c# asynchronous task-parallel-library

我正在尝试在执行一堆函数后处理抛出的异常。 我想将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方法?

2 个答案:

答案 0 :(得分:1)

在你的评论中,你说:

  

真正的控制台应用程序无效...

我猜你有这样的代码

original-master

这将导致异步代码启动,并且因为您不等待它结束,您的应用程序将立即关闭。所以当然你不会看到你的异常抛出,因为app已经关闭了。

试试这个:

public static void Main()
{
    Send();
}

这将导致您的main方法结束,直到任务结束。

答案 1 :(得分:-1)

此代码确实捕获了异常。您只是在这样的控制台应用程序中运行它:

void Main() { Send(); }

主要退出并且在进行异常处理之前该过程终止。使用Send().Wait();