如果api1、api2和api3都是异步的,那么它们将 * 并发地 * 运行。They might or might not run in parallel。 请注意,如果api1、api2和api3都返回Future,则这些Future都不是艾德并且当它们中的任何一个或全部完成时,您都不会得到通知。如果您希望在所有操作完成时收到通知,请使用Future.wait。如果您不关心并希望将它们视为“一发即忘”操作,那么Future.wait就不是必需的。 如果你还想静默地吞下来自api1、api2和api3的错误,那么你应该使用Future.ignore扩展方法:
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
}
2条答案
按热度按时间jhkqcmku1#
我的问题是,这是否意味着前3个函数将同时执行**,然后当其他函数运行时,它们也将同时执行**?
这取决于你所说的“同时”是什么意思。当您这样做时:
如果
api1
、api2
和api3
都是异步的,那么它们将 * 并发地 * 运行。They might or might not run in parallel。请注意,如果
api1
、api2
和api3
都返回Future
,则这些Future
都不是艾德并且当它们中的任何一个或全部完成时,您都不会得到通知。如果您希望在所有操作完成时收到通知,请使用Future.wait
。如果您不关心并希望将它们视为“一发即忘”操作,那么Future.wait
就不是必需的。如果你还想静默地吞下来自
api1
、api2
和api3
的错误,那么你应该使用Future.ignore
扩展方法:2wnc66cl2#
你可以通过使用Future.wait和Future.any函数来实现。
Future.wait()在列表中的所有future成功完成时完成。如果列表中的任何future失败并出现错误,则返回的future也会失败并出现错误。
Future.any()在列表中的任何期货成功完成后立即完成。返回的future将以列表中第一个成功完成的future的值完成。
下面是一个可能适合你的示例代码: