这是我的解决方案中非常常见的情况:
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
}
});