wait 属性

Future<(T1, T2)> wait

等待并行中的 futures。

等待本记录中的所有 futures。如果所有 futures 都成功,则返回一个值记录。

返回的未来将在所有 futures 都完成时完成。如果任何 futures 没有完成,则返回的未来也不会完成。

如果某些 futures 成功完成,则返回的未来将完成一个 ParallelWaitErrorParallelWaitError.values 是成功 futures 的值的记录,有错误的 futures 为 nullParallelWaitError.errors 是相同形状的记录,成功 futures 的值是 null,有错误的 futures 则包含一个带有错误信息的 AsyncError

实现

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;
}