unsafeRun method

FutureOr<Exit<E, A>> unsafeRun(
  1. ZIOContext<R> ctx
)

Run the ZIO with the provided ZIOContext.

Implementation

FutureOr<Exit<E, A>> unsafeRun(ZIOContext<R> ctx) {
  if (ctx.signal.unsafeCompleted) {
    return Exit.left(Interrupted(stackTrace));
  }

  try {
    if (stackTrace != null) {
      return _unsafeRun(ctx).then((exit) {
        if (ctx.signal.unsafeCompleted && exit is! Left<Interrupted<E>, A>) {
          return Exit.left(Interrupted(stackTrace));
        }

        return exit.mapLeft((cause) => cause.withTrace(stackTrace!));
      });
    }

    return _unsafeRun(ctx).then((exit) {
      if (ctx.signal.unsafeCompleted) {
        return Exit.left(const Interrupted());
      }

      return exit;
    });
  } catch (err, stack) {
    return Exit.left(Defect(err, stack, stackTrace));
  }
}