в http4s по-умолчанию не cancellable?
Правильный / самый короткий ли способ исправить эту ситуацию что-то вроде такого:
def initializeServer: IO[Unit] =
for {
terminateWhenTrue <- SignallingRef[IO, Boolean](false)
exitCode <- Ref.of[IO, ExitCode](ExitCode.Success)
_ <- IO.cancelable[Unit] { _ =>
BlazeServerBuilder[IO]
.bindHttp(8080)
.withHttpApp(app)
.serveWhile(terminateWhenTrue, exitCode)
.compile
.drain
terminateWhenTrue.set(true)
}
} yield ()
Предвосхищая вопросы о том зачем это нужно: чтобы без sbtRevolver / fork работал в sbt Ctrl-C при использовании IOApp.
https://gist.github.com/eld0727/4d0bebbb9f9e513f07e74bdb1d3ce2a4
Короче зря я ругал http4s. Оказалось что просто не вызывается всё-таки cancellation в IOApp когда в sbt нажимаешь Ctrl-C если там нет форка :(
Обсуждают сегодня