异步方法无法返回布尔值

问题描述 投票:0回答:2
private void ValidatePolicy (string PolicyNumber)
{
  var ispolicyvalid = this.IsPolicyExistInADCAsync(PolicyNumber);  
  if(ispolicyvalid) // here I am getting error
  {
    // some logic happens here 
  }
}

这是我的代码,我收到错误 - 无法将类型

system.threading.tasks.task<bool>
隐式转换为
bool

public async Task<bool> IsPolicyExistAsync(string policyNumber)
{
    var accountId = await this.GetAccountId(policyNumber);
    return accountId != null;
}

public async Task<string> GetAccountId(string accountReference)
{
    // some more logic here

    return accountId;
}

我尝试了以下方法

选项1

var ispolicyvalid = this.IsPolicyExistAsync(policyDetails.CorrectPolicyNumber).Result; 

如果我尝试这种方法,我会收到另一个错误 - 将task.result替换为await

选项2

private void ValidatePolicy (string PolicyNumber)
{
  var ispolicyvalid = this.IsPolicyExistInADCAsync(PolicyNumber);  
  if(ispolicyvalid) 
  {
    // some logic happens here 
  }
}

public bool IsPolicyExistAsync(string policyNumber)
{
    var accountId = this.GetAccountId(policyNumber);
    return accountId != null;
}

在这种方法中没有错误,但是

ispolicyvalid
始终为 false,因为
GetAccountId()
方法仍在等待结果,因此
accountId
不会为空值 - 它的错误结果

c# asp.net .net asynchronous async-await
2个回答
2
投票

我收到错误 - 无法将类型 system.threading.tasks.task 隐式转换为 bool

因为

if
需要
bool
,而不是由
Task<bool>
重新调整的
IsPolicyExistInADCAsync
。将
ValidatePolicy
更改为
async Task
:

private async Task ValidatePolicy (string PolicyNumber)
{
    var ispolicyvalid = await IsPolicyExistInADCAsync(PolicyNumber);  
    if(ispolicyvalid) // here I am getting error
    {
        // some logic happens here 
    }
}

但是 ispolicyvalid 总是 false

是的,因为返回任务的方法(通常)不返回 null。并且异步状态机应该始终导致不可为空

Task

另请阅读:


1
投票

无法将类型 system.threading.tasks.task 隐式转换为 bool

这意味着

IsPolicyExistInADCAsync()
是一种
async
方法。 (显示的代码不包含此方法,但包含与其类似的方法,它们本身就是
async
,所以很可能这个也是如此。)

基本上,您将在您所展示的 IsPolicyExistAsync() 方法中执行

 代码已经执行的操作。制定方法
async
:

private async Task ValidatePolicy(string PolicyNumber)
以及

await

其中的异步操作:

var ispolicyvalid = await this.IsPolicyExistInADCAsync(PolicyNumber);
当然,任何调用 

ValidatePolicy()

 的东西也需要 
await
 其结果。

© www.soinside.com 2019 - 2024. All rights reserved.