提问人:Kumas 提问时间:8/31/2023 最后编辑:Theodor ZouliasKumas 更新时间:8/31/2023 访问量:104
异步方法无法返回布尔值
Async method not able to return bool value
问:
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 结果ispolicyvalid
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。异步状态机应始终导致 not-nullable 。Task
另请阅读:
- .NET 中的异步编程 - 简介、误解和问题
- 不要阻止异步代码(为什么你应该避免调用,还要查看有关
GetAwaiter() 的信息。GetResult()
Task<T>.Result
)
评论
无法将类型 System.Threading.Tasks.Task 隐式转换为 bool
这意味着这是一个方法,或者至少是返回 .(显示的代码不包括此方法,但包含与其类似的方法,这些方法本身就是 ,因此很可能这个方法也是如此。IsPolicyExistInADCAsync()
async
Task
async
基本上,您将完全按照代码在所显示的方法中执行的操作。使方法:IsPolicyExistAsync()
async
private async Task ValidatePolicy(string PolicyNumber)
以及其中的异步操作:await
var ispolicyvalid = await this.IsPolicyExistInADCAsync(PolicyNumber);
当然,任何调用的东西也需要它的结果。ValidatePolicy()
await
评论
accountId != null
true
false
accountId
评论