如何在网络核心Web应用程序中创建任务包装器或中间件?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在网络核心Web应用程序中创建任务包装器或中间件?相关的知识,希望对你有一定的参考价值。

这是我的解决方案中非常常见的情况:

    private IActionResult MyAction()
    {
        //Run in background
        Task.Run(async () =>
        {
            try
            {

                await //..
            }
            catch (Exception ex)
            {
                //Log exception
            }
        });
        return new StatusCodeResult(StatusCodes.Status200OK);
    }

因此,在我的所有操作中,我使用相同的日志代码重复相同的try catch,我正在尝试执行以下操作:

    private IActionResult MyAction()
    {
        Task.Run(MyExceptionHandledAsyncTask(async () =>
        {
            await //..

        }));
        return new StatusCodeResult(StatusCodes.Status200OK);
    }

MyExceptionHandledAsyncTask处理作为参数传递的任务/操作中的任何异常。

我一直在努力,但我正在努力处理返回的数据类型,我不知道该怎么做。

如何控制此模式并避免重复代码?

答案

您只需创建一个接收Func <Task>作为参数的方法:

public void Test()
{
    RunSafely(() => Task.Delay(2000));
}

public Task RunSafely(Func<Task> job)
    => Task.Run(async () =>
    {
        try
        {
            await job();
        }
        catch (Exception)
        {
            //todo 
        }
    });

以上是关于如何在网络核心Web应用程序中创建任务包装器或中间件?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 ASP.NET Web API 中创建中间件?我参考了网上的资料并尝试过,但没有成功

使用 IIS 在 Delphi 2009 中创建 REST Web 服务

如何在 AWS 中创建环境变量(空格)?

如何在 Spring Boot 客户端应用程序中创建不共享底层网络连接的套接字

无需包装器或使用 API 访问 Google 趋势数据:Python

如何使用 C++ 在任务计划程序中创建任务