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;
}
它确实忽略了所有其他期货的任何错误。另一方面,它也忽略了非错误结果,所以我想这很好。
当我们不再关心结果时,我们缺少取消未来的方法。
我知道当列表中的所有期货都已完成时,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;
}
它确实忽略了所有其他期货的任何错误。另一方面,它也忽略了非错误结果,所以我想这很好。
当我们不再关心结果时,我们缺少取消未来的方法。