在另一个答案中大致使用了以下代码:
c.Events.OnRedirectToAccessDenied = async (context) => context.Response.StatusCode = 403;
编译器在箭头运算符上警告不以任何形式等待表达式。删除 async
关键字确认 OnRedirectToAccessDenied
想要一个返回 Task ( Func<RedirectContext<CookieAuthenticationOptions>, Task>
) 的函数,但无法构建以下内容:
c.Events.OnRedirectToAccessDenied = (context) => context.Response.StatusCode = 403;
async
关键字似乎仅用于将表达式转换为任务。我没见过async
以前用过这种方式。
下面的代码不会给出任何编译器警告,但看起来并不优雅。
c.Events.OnRedirectToAccessDenied = (context) => Task.Run(
() => context.Response.StatusCode = 403
);
编译器警告是否无根据,使用 async
是个好主意吗?以这种方式?
最佳答案
如果某些东西需要一个 Task 但您实际上没有,那么您可以返回 Task.CompletedTask
来满足该要求,和 标记处理已完成,同时仍然保持一切同步,并且没有创建状态机的开销(这将是使用 async
关键字的结果):
c.Events.OnRedirectToAccessDenied = (context) =>
{
context.Response.StatusCode = 403;
return Task.CompletedTask;
}
关于c# - 使用异步创建隐式任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61545991/