ZIO:如何为永远 运行 的进程加入 Fibers
ZIO: How to join Fibers for Processes that run forever
我有以下 ZIO 程序,其中有两个进程都 运行 永远:
for {
..
numberProvider <- numberProvider(queue).fork // runs forever
numberService <- numberService(queue) // runs forever
..
} yield ()
以上代码有效,但我想知道这是否是好的做法。
有2个问题:
可以吗,到运行2.主程序上处理。或者它也应该是 Fiber?
我是否必须最终 join
光纤,即使它们永远 运行 因此永远不会到达 join
?
for {
..
numberProvider <- numberProvider(queue).fork // runs forever
numberService <- numberService(queue) // runs forever
..
_ <- numberProvider.join // join in any case
} yield ()
如果他们 运行 永远,您就不必 .join
光纤。
请注意,由于 1.0.0-RC17
,#zio 正是出于这个原因添加了 .daemon
组合器,请参阅此处的发行说明:https://github.com/zio/zio/releases/tag/v1.0.0-RC17 从现在开始,.fork
应该避免 forever-运行ning 光纤。
根据fanf42的回答我把我的代码调整为:
for {
..
numberProvider <- numberProvider(queue).daemon // runs forever
numberService <- numberService(queue) // runs forever
..
} yield ()
但这没有用(将 fork
更改为 daemon
)。它永远不会到达下一行。
所以请务必 fork
daemon
。
for {
..
numberProvider <- numberProvider(queue).daemon.fork // runs forever
numberService <- numberService(queue) // runs forever
..
} yield ()
我有以下 ZIO 程序,其中有两个进程都 运行 永远:
for {
..
numberProvider <- numberProvider(queue).fork // runs forever
numberService <- numberService(queue) // runs forever
..
} yield ()
以上代码有效,但我想知道这是否是好的做法。
有2个问题:
可以吗,到运行2.主程序上处理。或者它也应该是 Fiber?
我是否必须最终
join
光纤,即使它们永远 运行 因此永远不会到达join
?for { .. numberProvider <- numberProvider(queue).fork // runs forever numberService <- numberService(queue) // runs forever .. _ <- numberProvider.join // join in any case } yield ()
如果他们 运行 永远,您就不必 .join
光纤。
请注意,由于 1.0.0-RC17
,#zio 正是出于这个原因添加了 .daemon
组合器,请参阅此处的发行说明:https://github.com/zio/zio/releases/tag/v1.0.0-RC17 从现在开始,.fork
应该避免 forever-运行ning 光纤。
根据fanf42的回答我把我的代码调整为:
for {
..
numberProvider <- numberProvider(queue).daemon // runs forever
numberService <- numberService(queue) // runs forever
..
} yield ()
但这没有用(将 fork
更改为 daemon
)。它永远不会到达下一行。
所以请务必 fork
daemon
。
for {
..
numberProvider <- numberProvider(queue).daemon.fork // runs forever
numberService <- numberService(queue) // runs forever
..
} yield ()