-
Couldn't load subscription status.
- Fork 1.4k
Closed
Labels
Description
With ZIO 1.0.0-RC21-2 (actually 1.0.0-RC21-2+37-be08a9e6-SNAPSHOT), using ZManaged.mapParN propagates the parallel release strategy to both ZManaged arguments unexpectedly. The below test outputs:
start finalizer C
start finalizer A
start finalizer D
end finalizer D
end finalizer A
end finalizer C
while I would expect:
start finalizer D
start finalizer A
end finalizer D
start finalizer C
end finalizer C
end finalizer A
or some other permutation where at least start D - end D - start C - end C are in order.
import zio.test._
import zio.test.Assertion._
import zio.stream.ZStream
import zio.duration._
import zio._
import zio.console._
import zio.clock.Clock
object InnerStreamFinalizerSpec extends DefaultRunnableSpec {
override def spec =
testM("forkManaged") {
ZManaged
.mapParN(
ZIO.unit
.toManaged(_ => putStrLn("start finalizer A") *> ZIO.sleep(1.second) *> putStrLn("end finalizer A"))
.fork,
for {
c <- ZIO.unit
.toManaged(_ => putStrLn("start finalizer C") *> ZIO.sleep(1.second) *> putStrLn("end finalizer C"))
.fork
d <- ZIO.unit
.toManaged(_ => putStrLn("start finalizer D") *> ZIO.sleep(1.second) *> putStrLn("end finalizer D"))
.fork
} yield ()
)((_, _) => ZStream.tick(1.second))
.use { _ =>
ZIO.sleep(1.second) *> ZIO.succeed(assertCompletes)
}
}.provideCustomLayer(Clock.live)
}