ZIO:如何加入 Fibers 以实现永久运行的流程

pme*_*pme 6 concurrency functional-programming scala for-comprehension zio

我有以下 ZIO 程序,其中包含两个永久运行的进程:

    for {
      ..
      numberProvider <- numberProvider(queue).fork  // runs forever
      numberService <- numberService(queue)         // runs forever
      ..
    } yield ()
Run Code Online (Sandbox Code Playgroud)

上面的代码有效,但我想知道这是否是好的做法。

有2个问题:

  1. 可以吗,在主程序上运行 2. 进程。或者它也应该是Fiber

  2. join最终是否必须使用 Fibers,即使它们永远运行,因此永远不会到达join?

    for {
      ..
      numberProvider <- numberProvider(queue).fork  // runs forever
      numberService <- numberService(queue)         // runs forever
      ..
      _ <- numberProvider.join // join in any case
    } yield ()
    
    Run Code Online (Sandbox Code Playgroud)

fan*_*f42 5

.join如果它们永远运行,您就不必使用光纤。

请注意,由于1.0.0-RC17, #zio.daemon正是出于这个原因添加了组合器,请参阅此处的发行说明:https : //github.com/zio/zio/releases/tag/v1.0.0-RC17从现在开始,.fork应避免使用永远运行的纤维。