c# - 使用异步创建隐式任务?

标签 c# async-await

在另一个答案中大致使用了以下代码:

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/

相关文章:

python - @asyncio.coroutine 与 async def

c# - ASP.NET 核心身份种子只创建最后一个用户

c# - Puppeteer Sharp 奇怪的行为

c# - 使用 Caliburn Micro 进行导航

flutter - Flutter Web 的 Shared_Preferences?

javascript - Babel async/await 只返回 Promise

c# - Api Controller 中长时间运行的任务(使用 Web API,自托管 OWIN)

c# - 我真的在这里使用任务和异步获得了任何东西吗?

c# - MessageBox.Show 根本不起作用

c# - 在 Redis 中批量创建键 - ServiceStack C#