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

本文关键字:异步 异常 代码 处理 何使用 嵌套 函数 | 更新日期: 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();