Эквивалентный код будущего взаимодействия ZIO с разными результатами
Работал с ZIO впервые и написал код, сводившийся к следующему:
val x = ZStream.fromIterable(Iterable.empty).runDrain
await(zio.Runtime.default.unsafeRun(x.toFuture))
он компилируется, но терпит неудачу во время выполнения с
[info] java.util.concurrent.ExecutionException: Boxed Exception
[info] at scala.concurrent.impl.Promise$.scala$concurrent$impl$Promise$$resolve(Promise.scala:99)
[info] at scala.concurrent.impl.Promise$DefaultPromise.tryComplete(Promise.scala:278)
[info] at scala.concurrent.Promise.complete(Promise.scala:57)
[info] at scala.concurrent.Promise.complete$(Promise.scala:56)
[info] at scala.concurrent.impl.Promise$DefaultPromise.complete(Promise.scala:104)
[info] at scala.concurrent.Promise.failure(Promise.scala:109)
[info] at scala.concurrent.Promise.failure$(Promise.scala:109)
[info] at scala.concurrent.impl.Promise$DefaultPromise.failure(Promise.scala:104)
[info] at zio.Fiber.$anonfun$toFutureWith$2(Fiber.scala:334)
[info] at zio.internal.FiberContext.evaluateNow(FiberContext.scala:404)
[info] at zio.internal.FiberContext.$anonfun$evaluateLater$1(FiberContext.scala:787)
[info] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
[info] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
[info] at java.base/java.lang.Thread.run(Thread.java:829)
[info] Cause: java.lang.InterruptedException: Interrupted by fibers: #50
[info] at zio.Cause.$anonfun$squashWith$1(Cause.scala:403)
[info] at scala.Option.orElse(Option.scala:477)
[info] at zio.Cause.squashWith(Cause.scala:400)
[info] at zio.Cause.squashTraceWith(Cause.scala:425)
[info] at zio.Fiber.$anonfun$toFutureWith$2(Fiber.scala:334)
[info] at zio.internal.FiberContext.evaluateNow(FiberContext.scala:404)
[info] at zio.internal.FiberContext.$anonfun$evaluateLater$1(FiberContext.scala:787)
[info] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
[info] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
[info] at java.base/java.lang.Thread.run(Thread.java:829)
val x = ZStream.fromIterable(Iterable.empty).runDrain
await(zio.Runtime.global.unsafeRunToFuture(x))
прекрасно работает.
Кажется, что эти два понятия должны быть эквивалентны, но это явно не так. Почему нет? Как я могу интерпретировать это сообщение об ошибке, чтобы оно сообщило мне что-то полезное?