Эквивалентный код будущего взаимодействия 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))

прекрасно работает.

Кажется, что эти два понятия должны быть эквивалентны, но это явно не так. Почему нет? Как я могу интерпретировать это сообщение об ошибке, чтобы оно сообщило мне что-то полезное?

0 ответов

Другие вопросы по тегам