runSyncOrThrow<E, A> method

A runSyncOrThrow<E, A>(
  1. EIO<E, A> zio
)

Try to run the ZIO synchronously, throwing a Future if it is asynchronous.

Implementation

A runSyncOrThrow<E, A>(EIO<E, A> zio) {
  assert(!_disposed, 'Runtime has been disposed');

  final signal = DeferredIO<Never>();
  final exit = run(zio, interruptionSignal: signal);

  if (exit is Future) {
    signal.failCauseIO(const Interrupted()).runSyncOrThrow();
    throw Interrupted<E>();
  }

  return exit.getOrElse((l) => throw l);
}