【问题标题】:Select Future or waitAny in Dart?在 Dart 中选择 Future 还是 waitAny?
【发布时间】:2023-04-01 18:30:01
【问题描述】:

我了解Future.wait 获取期货列表并在列表中的所有期货都完成后返回已完成期货的列表。

Dart 中有没有办法阻止并等待列表中的任何未来完成,而不是等待它们全部完成?

【问题讨论】:

    标签: dart async-await future


    【解决方案1】:

    不是真的。我们可以添加一个Future.waitAny(其中现有的隐式为waitAll)。

    功能很简单:

    Future waitAny(Iterable<Future> futures) {
      var completer = new Completer();
      for (var f in futures) {
        f.then((v) { 
          if (!completer.isCompleted) completer.complete(v);
        }, onError: (e, s) {
          if (!completer.isCompleted) completer.completeError(e, s);
        });
      }
      return completer.future;
    }
    

    它确实忽略了所有其他期货的任何错误。另一方面,它也忽略了非错误结果,所以我想这很好。

    当我们不再关心结果时,我们没有办法取消未来。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-04
      • 2020-02-25
      • 1970-01-01
      • 2012-09-13
      相关资源
      最近更新 更多