【问题标题】:Can I use await without async function?我可以在没有异步功能的情况下使用 await 吗?
【发布时间】:2019-10-27 14:00:41
【问题描述】:

我要声明一个接收异步函数结果的变量。

var eff_histo= await _eff_histo(selectedline);

await 表达式只能在异步函数中使用

【问题讨论】:

  • 这在很大程度上取决于您要做什么。
  • 目前还不可能,请看下面我的回答。

标签: flutter async-await


【解决方案1】:

你还是误会asyncasync 关键字不是的意思是“在另一个线程上运行”。

要将某些代码推送到另一个线程,您需要明确地执行此操作,例如,Task.Run:

await Task.Run(() => Logger.LogInfo("Pushing new call {0} with {1} id".Fill(callNotificationInfo.CallerId));

我有一个async/await intro post,您可能会觉得有帮助。

【讨论】:

    【解决方案2】:

    你不能在异步函数之外使用等待,尝试在本地构建你的变量并在 initState 中声明你的变量

    var eff_histo;
    @override
    void initState() async {
    super.initState()
    eff_histo= await _eff_histo(selectedline);
    
    }
    

    【讨论】:

    • 我很确定您不能更改 initState() 方法。通过更改,我指的是添加async 标签。应该创建一个新方法,然后在该方法上使用异步,然后在 initState() 中调用新方法,请参阅stackoverflow.com/a/51901311/4712391
    • 我不能在 initState fun 中使用异步!
    【解决方案3】:

    我认为这更像是一种哲学,即同步方法不应该等待,因为其他重要任务可能会受到影响,耗时的异步任务可能会因此而耗时await 在那里很有意义。查看更多信息https://github.com/dart-lang/sdk/issues/22269#issuecomment-108458526

    【讨论】:

      猜你喜欢
      • 2015-08-19
      • 1970-01-01
      • 2012-08-04
      • 1970-01-01
      • 2020-12-10
      • 2020-09-20
      • 2019-07-27
      • 2016-11-14
      • 1970-01-01
      相关资源
      最近更新 更多