我了解到,scalaz.stream.time.awakeEvery(1.second)
我可以创建一个每秒创建一个事件的流程。很明显。然后我可以映射该过程以每秒完成一些任务。到目前为止,一切都很好。
如果我想停止此活动怎么办?我试过了,创建的进程在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")
尽管如此,它仍然会在打印“Killed”之后打印时间,并且一直持续下去。
如何停止该进程并释放它使用的资源(线程)?我发现我可以通过关闭 ScheduledThreadPoolExecutor 来阻止它,但是没有更优雅的方法吗?