【问题标题】:How do I initiate multiple Futures at the same time to populate a single FutureBuilder ListView?如何同时启动多个 Future 以填充单个 FutureBuilder ListView?
【发布时间】:2020-06-30 22:39:39
【问题描述】:

到目前为止,我所做的工作是一个接一个地调用每个未来。所有这些都添加到列表中。 但是,有时其中一个 API 可能无法工作,因此尚未加载的其余 API 会成为瓶颈。我想同时启动所有期货,并让它们全部并行运行以填充列表,因为结果来自它们中的任何一个。我怎样才能做到这一点?

TLDR:dart/flutter 中的多线程?

【问题讨论】:

    标签: multithreading flutter dart


    【解决方案1】:

    如果你有 3 个期货要并行执行:

    Future<int> async1() async {
        await Future<String>.delayed(const Duration(seconds: 1));
        return 10;
    }
    
    Future<int> async2() async {
        await Future<String>.delayed(const Duration(seconds: 2));
        return 20;
    }
    
    Future<int> async3() async {
        await Future<String>.delayed(const Duration(seconds: 3));
        return 30;
    }
    

    您可以并行执行它们并通过执行以下操作等待所有它们完成:

    Future.wait([async1(), async2(), async3()]).then((List<int> nums) {
         // This code executes in 3 seconds (3 endpoints in parallel)
    });
    

    【讨论】:

    • 谢谢。 then() { } 中的代码会在每次期货之一完成时执行,还是在所有期货完成后才执行一次?因为我希望期货在完成后立即填充列表,而无需等待其他期货。
    • 不,只有在所有任务完成后才会执行。
    猜你喜欢
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 2020-03-20
    • 2020-10-29
    相关资源
    最近更新 更多