我可以在flutter dart中同时运行多个异步函数吗?

uidvcgyl  于 2023-05-04  发布在  Flutter
关注(0)|答案(2)|浏览(246)

假设我有4个API调用,可能会调用更多的API。然后,我进入main(){}并编写

api1();
api2();
api3();

而每一个的主体是:

{
 await getData();
 getMoreData();
 getMoreData();
}

注意,我在main和函数体中都没有awaits
我的问题是,这是否意味着前3个函数将同时执行**,然后当其他函数运行时,它们也将同时执行**?

jhkqcmku

jhkqcmku1#

我的问题是,这是否意味着前3个函数将同时执行**,然后当其他函数运行时,它们也将同时执行**?
这取决于你所说的“同时”是什么意思。当您这样做时:

void main() {
  api1();
  api2();
  api3();
}

如果api1api2api3都是异步的,那么它们将 * 并发地 * 运行。They might or might not run in parallel
请注意,如果api1api2api3都返回Future,则这些Future都不是艾德并且当它们中的任何一个或全部完成时,您都不会得到通知。如果您希望在所有操作完成时收到通知,请使用Future.wait。如果您不关心并希望将它们视为“一发即忘”操作,那么Future.wait就不是必需的。
如果你还想静默地吞下来自api1api2api3的错误,那么你应该使用Future.ignore扩展方法:

void main() {
  api1().ignore();
  api2().ignore();
  api3().ignore();
}
2wnc66cl

2wnc66cl2#

你可以通过使用Future.wait和Future.any函数来实现。
Future.wait()在列表中的所有future成功完成时完成。如果列表中的任何future失败并出现错误,则返回的future也会失败并出现错误。
Future.any()在列表中的任何期货成功完成后立即完成。返回的future将以列表中第一个成功完成的future的值完成。
下面是一个可能适合你的示例代码:

Future<void> runAsyncFunctions() async {
    // Create a list of futures
    List<Future<void>> futures = [
    asyncFunction1(),
    asyncFunction2(),
    asyncFunction3(),
    ];
  
    // Wait for all the futures to complete
    await Future.wait(futures);
  
   // All the futures have completed at this point
   }

相关问题