异步方法无法返回布尔值

Async method not able to return bool value

提问人:Kumas 提问时间:8/31/2023 最后编辑:Theodor ZouliasKumas 更新时间:8/31/2023 访问量:104

问:

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;
}

在这种方法中,没有错误,但总是 false,因为方法仍在等待结果,因此不会是 null 值——它的 false 结果ispolicyvalidGetAccountId()accountIdScreenshot

C# asp.net .NET 异步 async-await

评论


答:

3赞 Guru Stron 8/31/2023 #1

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

因为需要,而不是由重新调整。更改为 :ifboolTask<bool>IsPolicyExistInADCAsyncValidatePolicyasync 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。异步状态机应始终导致 not-nullable 。Task

另请阅读:

评论

0赞 Kumas 8/31/2023
根据我所做的更改的建议,不幸的是它仍然不起作用。private async Task ValidatePolicy(string policynumber) { var ispolicyvalid = waitit this.IsPolicyExistAsync(策略编号);} 没有错误,但以下方法仍在等待结果 - 因此我得到 accountId 不是 null – 它的错误结果。public async Task<bool> IsPolicyExistAsync(string policyNumber) { var accountId = waitit this.GetAccountId(策略号);返回 accountId != null;}
1赞 Kumas 9/1/2023
我现在很好,谢谢你的建议 - 我忘记在解决我问题的“ValidatePolicy”的调用方法上添加 await
3赞 David 8/31/2023 #2

无法将类型 System.Threading.Tasks.Task 隐式转换为 bool

这意味着这是一个方法,或者至少是返回 .(显示的代码不包括此方法,但包含与其类似的方法,这些方法本身就是 ,因此很可能这个方法也是如此。IsPolicyExistInADCAsync()asyncTaskasync

基本上,您将完全按照代码在所显示的方法中执行的操作。使方法:IsPolicyExistAsync()async

private async Task ValidatePolicy(string PolicyNumber)

以及其中的异步操作:await

var ispolicyvalid = await this.IsPolicyExistInADCAsync(PolicyNumber);

当然,任何调用的东西也需要它的结果。ValidatePolicy()await

评论

0赞 Kumas 8/31/2023
根据我所做的更改的建议,不幸的是它仍然不起作用。private async Task ValidatePolicy(string policynumber) { var ispolicyvalid = waitit this.IsPolicyExistAsync(策略编号);} 没有错误,但以下方法仍在等待结果 - 因此我得到 accountId 不是 null – 它的错误结果。public async Task<bool> IsPolicyExistAsync(string policyNumber) { var accountId = waitit this.GetAccountId(策略号);返回 accountId != null;}
0赞 David 8/31/2023
@Kumas:“仍在等待结果”并不描述问题。如果您想要异步操作的结果,则需要等待该结果。那么具体问题是什么呢?如果你期望是,但事实是,当你调试时,什么是?你以为会是什么?为什么?根据显示的代码,该方法“在这里做了更多的逻辑”。我们不知道这个逻辑是什么。但是,如果您有一些其他代码未在此处显示,这些代码产生了此处未描述的意外结果,则这可能是一个新的单独问题。accountId != nulltruefalseaccountId
0赞 Kumas 9/1/2023
非常感谢您的回复,对不起,这是我的错误 - 我忘记在“ValidatePolicy”的调用方法上添加 await 以解决我的问题,再次感谢您