ZIO<R, E, A>.asyncInterrupt constructor
ZIO<R, E, A>.asyncInterrupt (
- IO<
Unit> f(- AsyncContext<
E, A> $
- AsyncContext<
Implementation
factory ZIO.asyncInterrupt(IO<Unit> Function(AsyncContext<E, A> $) f) =>
ZIO.from((ctx) {
final context = AsyncContext<E, A>();
final finalizer = f(context);
if (context._deferred.unsafeCompleted) {
return context._deferred.await().unsafeRun(ctx);
}
final interuption =
ctx.signal.await<R>().alwaysIgnore(finalizer.lift());
return context._deferred
.await<R>()
.race(interuption)
.unsafeRun(ctx.withoutSignal);
});