【问题标题】:While the inner method async does the outer method has to be async?虽然内部方法异步,但外部方法必须是异步的吗?
【发布时间】:2021-04-18 21:11:22
【问题描述】:

我有一个async 方法。我可以从非异步方法调用它吗?像下面这样

我的方法


void method() async{

await 'something'

}

案例一

onPressed:() {
method();
}

案例 2

onPressed:() async{
await method();
}

以上哪项是正确的?在我看来,其中两个还可以。但是,我认为第二个的工作速度要慢得多,我错了吗?

【问题讨论】:

    标签: flutter dart asynchronous async-await


    【解决方案1】:

    一般来说,async 函数的调用者如果要等待调用完成,也必须是异步的。这使得异步具有传染性。

    在您的情况下,您的 async 函数是“即发即弃”函数;调用者不能等待它完成,所以没关系。您的第二种情况(使用await method())是错误的,因为您应该仅在Future/FutureOr 上使用await,但method 返回void,因此无需等待。 (如果你启用了await_only_futures lint,Dart 分析器会警告你。)

    您还可以通过使用 tear-off 来进一步简化代码,而不是创建不必要的闭包:

    onPressed: method
    

    【讨论】:

      猜你喜欢
      • 2018-05-15
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 2019-08-10
      • 1970-01-01
      • 2020-09-12
      • 1970-01-01
      相关资源
      最近更新 更多