首页 >后端开发 >C++ >如何处理'即发即忘”异步方法中的异常?

如何处理'即发即忘”异步方法中的异常?

DDD
DDD原创
2024-12-29 05:34:14788浏览

How Can I Handle Exceptions in a

保证异常传播的即发即忘

在“即发即弃”方法中,调用方法时无需等待其完成或处理其结果。然而,当一个方法返回一个任务时,它并不是真正的“即发即忘”。任务中抛出的异常不会传播到调用上下文。

为了确保“Fire and Forget”方法中的异常得到处理或升级,建议修改扩展方法如下:

public static async void Forget(this Task task)
{
    await task;
}

通过等待任务,任务中抛出的任何异常都将传播到调用上下文并进行处理或升级

处理“Fire and Forget”方法中的预期异常

最初的问题引起了对可能在“Fire and Forget”方法中抛出预期和可忽略异常的方法的担忧。忘记”的上下文。为了解决这个问题,可以修改扩展方法以接受可接受的异常类型列表:

public static async void Forget(this Task task, params Type[] acceptableExceptions)
{
    try
    {
        await task.ConfigureAwait(false);
    }
    catch (Exception ex)
    {
        // TODO: consider whether derived types are also acceptable.
        if (!acceptableExceptions.Contains(ex.GetType()))
            throw;
    }
}

这允许调用者指定应忽略哪些异常类型以及应升级哪些异常类型,从而提供对“Fire and Forget”方法中的异常处理行为。

以上是如何处理'即发即忘”异步方法中的异常?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn