Effect<E, L, R>.raceAll constructor

Effect<E, L, R>.raceAll(
  1. Iterable<Effect<E, L, R>> iterable
)

{@category constructors}

Implementation

factory Effect.raceAll(Iterable<Effect<E, L, R>> iterable) =>
    Effect.from((context) {
      final signal = Deferred<Never, Never>.unsafeMake();
      final deferred = Deferred<L, R>.unsafeMake();

      for (final effect in iterable) {
        effect
            .__unsafeRun(context.withSignal(signal))
            .then(deferred.unsafeCompleteExit);

        if (deferred.unsafeCompleted) {
          break;
        }
      }

      return deferred.wait<E>().__unsafeRun(context).then(
            (exit) => signal
                .failCause<E, L>(const Interrupted())
                .__unsafeRun(context.withoutSignal)
                .then((_) => exit),
          );
    });