gpt4 book ai didi

c# - 如何从 C# 中的异步任务 函数获取 bool 结果 - 错误 : Cannot implicitly convert type `void' to `bool'

转载 作者:可可西里 更新时间:2023-11-01 08:31:52 36 4
gpt4 key购买 nike

我已经创建了任务函数来验证我的 json 文件。一切正常,直到我没有使用结果。当我试图从 async task<bool> function 获得结果时它显示错误为 Cannot implicitly convert 'void' to bool .我的异步函数如下:

 private async Task<bool> MyValidationFunction(string json)
{
bool isValid = true;
.......DOING MY VALIDATION STUFF.....
return isValid;
}

从另一个函数调用这个函数如下:

 public bool GetJsonAndValidate()
{
bool isValid = true;
string jsonData = GetJson();
//******* Here I am getting the error.
bool isValid = MyValidationFunction(jsonData).Wait();
}

当我尝试调用 MyValidationFunction 时如上所述,它显示错误。我试图通过使用 Result 来获得结果属性(property),但它是抛出和错误。我的类(class)只是简单的公共(public)类(class)。我可以通过同步调用来完成,但我需要异步调用 MyValidationFunction从数据库中获取结果。如果我没有使用 bool 变量来捕获结果,那么它就可以正常工作。我错过了什么?我怎样才能从我的验证函数中得到 bool 结果?

最佳答案

声明 1. .Wait()没有返回结果。它是一个void方法,因此它的结果不能赋值给一个变量。
您可以使用 .Result这将等到 Task 完成并返回结果。

// Both are applicable to simple Tasks:
bool isValid = MyValidationFunction(jsonData).Result;

// does that same as

var task = MyValidationFunction(jsonData);
task.Wait();
bool isValid = task.Result;

但是,它对普通任务都有效,但对异步/等待功能无效,因为...

声明 2. 不要混淆 async 和 .Wait() - 它仍然阻塞线程,扼杀了异步/等待的想法并否定了所有的性能改进。

它还会在 WinForms、WPF、ASP.NET 和其他具有 SynchronizationContext 的环境中导致死锁。在此 Stephen Cleary's article 中阅读更多相关信息或者在这些 StackOverflow 问题中:

简单的规则:如果你使用异步,那么你就使用等待

// That's how you do it with async/await:
public async bool GetJsonAndValidate()
{
string jsonData = GetJson();
bool isValid = await MyValidationFunction(jsonData);
}

它不会阻塞线程并启用异步行为。

关于c# - 如何从 C# 中的异步任务 <bool> 函数获取 bool 结果 - 错误 : Cannot implicitly convert type `void' to `bool' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45138268/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com