Select Dart 中的 Future 还是 waitAny?

Select Future or waitAny in Dart?

我知道当列表中的所有期货都已完成时,Future.wait 会获取一个期货列表和 returns 一个已完成期货的列表。

Dart 中有没有一种方法可以阻塞并等待列表中的任何 future 完成,而不是等待它们全部完成?

不是真的。我们可以添加一个 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;
}

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

当我们不再关心结果时,我们缺少取消未来的方法。