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
不会为空值 - 它的错误结果
我收到错误 - 无法将类型 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
。
另请阅读:
Task<T>.Result
,另请查看有关GetAwaiter().GetResult()
的信息)无法将类型 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
其结果。