【问题标题】:Async function returns false but should return true异步函数返回 false 但应该返回 true
【发布时间】:2019-09-16 10:23:23
【问题描述】:

我有一个返回错误的函数的问题。

问题在于:return success 在实际运行之前: sucess = true 被命中,因为它是一个异步函数。

这个函数成功后如何返回 true?

public bool onefunction(ChromiumWebBrowser browser) {
  bool success = false;
  browser.GetMainFrame().EvaluateScriptAsync("someinfo").ContinueWith(t => {
    if (t.IsFaulted == false) {
      var response = t.Result;
      if (response.Success) {
        success = true;
      }
    }
  });

  //It returns false because this code runs before: "success = true"
  return success;
}

【问题讨论】:

  • 谢谢尼克,它是 C# 语言
  • 函数完成后才能测试成功。由于您的默认设置为 FALSE,因此您得到了 FALSE,因为您在完成之前检查状态。
  • @jdweng 是的,这是我遇到的问题。我不知道我可以通过什么方式做到这一点?
  • 你需要“一路异步”等待EvaluateScriptAsync
  • browser.GetMainFrame()....之前使用await

标签: c# function asynchronous boolean


【解决方案1】:

“一路异步”——方法:

public async Task<bool> onefunction(ChromiumWebBrowser browser) {
  bool success = false;
  try
  {
      var response = await browser.GetMainFrame().EvaluateScriptAsync("someinfo");
      succes = response.Success;
  }
  catch( Exception ex )
  {
      // TODO: Write Errorlog
  }

  return success;
}

注意:这意味着您也需要更改调用代码。如果您不能这样做,请告知。我们会为这种情况找到解决方案。

【讨论】:

  • 这很有趣,但我收到此错误:“无法将类型“CefSharp.JavascriptResponse”简单地转换为“布尔””
  • 我编辑了我的初始版本。你检查过差异吗?我会在几秒钟内把它说得更清楚。
  • 是的,现在错误消失了。恐怕我不确定如何更改调用代码。如何调用这个“onefunction”来检查布尔状态?
  • 这就是“一直异步”的痛苦——它需要“一直”。那就是bool success = await onefunction(browser);
  • 对不起,我想我弄错了。这似乎有效: bool success = await onefunction(browser);
猜你喜欢
  • 2016-04-16
  • 2014-10-21
  • 2020-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-05
  • 1970-01-01
相关资源
最近更新 更多