C# 在AuthorizationHandler中使用'await'

C# 在AuthorizationHandler中使用'await',c#,.net-core,async-await,asp.net-authorization,C#,.net Core,Async Await,Asp.net Authorization,我有一个AuthorizationHandler,它依赖于为.NET Core 3.1的授权中间件提供异步方法的服务。我必须在HandleRequirementAsync方法中调用其中一些异步方法。总体代码如下所示: { public class MyAuthorizationHandler : AuthorizationHandler<MyRequirement, Tuple<string, string>> { private read

我有一个AuthorizationHandler,它依赖于为.NET Core 3.1的授权中间件提供异步方法的服务。我必须在
HandleRequirementAsync
方法中调用其中一些异步方法。总体代码如下所示:

{
    public class MyAuthorizationHandler : AuthorizationHandler<MyRequirement, Tuple<string, string>>
    {
        private readonly IAuthIntelRepository authIntelRepository;
        public UserAssistanceAuthorizationHandler(IAuthIntelRepository authIntelRepository)
        {
            this.authIntelRepository = authIntelRepository;
        }
        protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, MyRequirement requirement, Tuple<string, string> someRessource)
        {
            //some async calls to authIntelRepository
            if (/*someCondition*/false)
            {
                context.Succeed(requirement);
            }
            return Task.CompletedTask;
        }
    }

    public class MyRequirement : IAuthorizationRequirement { }
}

我不确定这里的正确解决方案是什么。

如果您的
async
方法的返回类型是
Task
,那么,除了
wait
关键字外,您将您的方法视为
void
返回:

protected override async Task HandleRequirementAsync(AuthorizationHandlerContext context, MyRequirement requirement, Tuple<string, string> someRessource)
{
    await authIntelRepository....
    if (/*someCondition*/false)
    {
         context.Succeed(requirement);
     }
     return;
}
protectedoverride异步任务HandleRequirementAsync(AuthorizationHandlerContext上下文,MyRequirement需求,元组someResource)
{
等待作者报告。。。。
if(/*someCondition*/false)
{
成功(要求);
}
返回;
}

如果您的
异步
方法的返回类型是
任务
,那么,除了
等待
关键字外,您将方法视为是
无效
返回:

protected override async Task HandleRequirementAsync(AuthorizationHandlerContext context, MyRequirement requirement, Tuple<string, string> someRessource)
{
    await authIntelRepository....
    if (/*someCondition*/false)
    {
         context.Succeed(requirement);
     }
     return;
}
protectedoverride异步任务HandleRequirementAsync(AuthorizationHandlerContext上下文,MyRequirement需求,元组someResource)
{
等待作者报告。。。。
if(/*someCondition*/false)
{
成功(要求);
}
返回;
}

Add
async
,如错误消息所示。你没有发布你的第二次尝试,因此人们只能猜测你为什么会出现第二次错误。有一点是肯定的,您没有使用
异步任务
。这与.NET内核无关,这就是自.NET 4.5以来
async/await
和任务的工作方式如果使用
async
就没有理由使用
return Task.CompletedTask完全正确。让方法退出。您甚至不需要
返回
@PanagiotisKanavos谢谢,成功了。如错误消息所示,添加
async
。你没有发布你的第二次尝试,因此人们只能猜测你为什么会出现第二次错误。有一点是肯定的,您没有使用
异步任务
。这与.NET内核无关,这就是自.NET 4.5以来
async/await
和任务的工作方式如果使用
async
就没有理由使用
return Task.CompletedTask完全正确。让方法退出。您甚至不需要
返回@PanagiotisKanavos谢谢,成功了。