scala 在无限循环中运行cats资源

omqzjyyz  于 2023-05-29  发布在  Scala
关注(0)|答案(1)|浏览(185)

我想运行一个程序:无限循环中的资源。我试过useForever。应用程序不会关闭,但program(用于内容)仅运行一次。

val program: Resource[IO, Unit] = 
  for {
    _ <- Resource.eval(engine.createSth)
    _ <- Resource.eval(IO.sleep(2 seconds)
  } yield ()

program.useForever.as(ExitCode.Success)
1l5u6lss

1l5u6lss1#

.useForever用于当您希望拥有一个其行为完全在获取步骤中的资源。一个例子是HTTP服务器。在资源获取时,您绑定到一个端口并开始侦听。然后它永远运行。.useForever所做的一切就是防止资源被关闭。定义为= use(_ => IO.never)
相反,您需要.foreverM组合子,它重复地flatMap是一些一元程序,其自身处于无限循环中。

program.foreverM

然而在这种情况下,根本没有资源行为--它只是两个独立的动作被 Package 在资源中。你可以跳过这个

val run: IO[Nothing] = (engine.createSth >> IO.sleep(2.seconds)).foreverM

相关问题