wait 属性
并行等待多个 futures。
等待此记录中的所有 futures。如果所有 futures 都成功,则返回一个包含这些值的记录。
返回的 future 在所有 futures 完成后完成。如果有任何 futures 未完成,则返回的 future 也不会完成。
如果有某些 futures 完成时发生错误,则返回的 future 将以 ParallelWaitError 完成。The ParallelWaitError.values 是成功 futures 的值的记录,对于发生错误的 futures 为 null
。The ParallelWaitError.errors 是具有相同形状的记录,成功 futures 的值为 null
,发生错误的 futures 则包含一个 AsyncError,其中包含完成时发生错误的 futures 的错误。
实现
Future<(T1, T2)> get wait {
final c = Completer<(T1, T2)>.sync();
final v1 = _FutureResult<T1>($1);
final v2 = _FutureResult<T2>($2);
_FutureResult._waitAll([v1, v2], (int errors) {
if (errors == 0) {
c.complete((v1.value, v2.value));
} else {
c.completeError(ParallelWaitError(
(v1.valueOrNull, v2.valueOrNull),
(v1.errorOrNull, v2.errorOrNull),
errorCount: errors,
defaultError: v1.errorOrNull ?? v2.errorOrNull
));
}
});
return c.future;
}