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

问题描述 投票:-1回答:1

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

    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处理作为参数传递的任务/操作中的任何异常。

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

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

c# asp.net-core async-await
1个回答
0
投票

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

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

public Task RunSafely(Func<Task> job)
    => Task.Run(async () =>
    {
        try
        {
            await job();
        }
        catch (Exception)
        {
            //todo 
        }
    });
© www.soinside.com 2019 - 2024. All rights reserved.