【问题标题】:OWIN Authentication:async method lacks 'await' operatorsOWIN 身份验证:异步方法缺少“等待”运算符
【发布时间】:2017-11-09 18:20:19
【问题描述】:

我已经在我的项目中实现了 OWIN 身份验证。但是当我尝试构建项目时,它显示了一些错误。

显示错误的方法:

 public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
    {
    //code    
   }
  public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
    {
  //code 
    }

显示错误是

此异步方法缺少“等待”运算符,将同步运行。考虑使用 'await' 运算符来等待非阻塞 API 调用,或使用 'await Task.Run(...)' 在后台线程上执行 CPU 密集型工作。

我该如何解决这个问题?

【问题讨论】:

  • 请给我们看剩下的代码。

标签: c# .net owin


【解决方案1】:

async 不是签名的一部分。仅仅因为您覆盖 async 方法并不意味着您必须将覆盖标记为 async

因此,如果您的代码中没有任何 awaits,只需删除 async 标记。

public override Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
{
//code    
}
public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
//code 
}

【讨论】:

  • 但是当我从方法签名中删除异步时,它显示错误'并非所有代码路径都返回一个值'
【解决方案2】:

如果您在函数实现中未使用await 运算符,则可以删除async 修饰符。

然而,一旦你删除它,编译器会期望你为Task 提供一个返回值。您显然可以根据自己的选择创建一个Task,但在这种情况下,您可能只想返回以下内容(即discussed here):

public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
    return Task.FromResult<object>(null);
}

【讨论】:

    猜你喜欢
    • 2017-04-30
    • 2020-03-06
    • 1970-01-01
    • 2019-09-25
    • 2020-07-25
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多