Я узнал, что по scalaz.stream.time.awakeEvery(1.second)
Я могу создать процесс, который создает событие каждую секунду. Совершенно очевидно. Затем я смогу сопоставить этот процесс для выполнения каждой задачи каждую секунду. Все идет нормально.Как остановить процесс ScalaZ, созданный time.awakeEvery?
Что делать, если я хочу прекратить эту деятельность? Я пробовал p.kill.run.run
, где p
- это процесс, созданный time.awakeEvery(1.second)
, но он не работает.
Так что код выглядит следующим образом:
implicit val sc = new java.util.concurrent.ScheduledThreadPoolExecutor(1)
val p = time.awakeEvery(1.second)
p.map(println(_)).run.runAsync {
// just some printlines
}
Thread.sleep(4000)
println("Killing")
p.kill.run.run
println("Killed")
Тем не менее, он печатает время после выполнения печати «Убитые» и продолжается и навсегда.
Как остановить процесс и освободить используемые им ресурсы (потоки)? Я узнал, что могу остановить его, отключив ScheduledThreadPoolExecutor, но разве нет более элегантного способа?