私はそれを学んだscalaz.stream.time.awakeEvery(1.second)
1秒ごとにイベントを作成するプロセスを作成できます。かなり明白です。そのプロセスをマップして毎秒何らかのタスクを達成することができます。ここまでは順調ですね。ScalaZ Processを停止する方法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をシャットダウンすることでそれを止めることができることを知りましたが、そこにはもっとエレガントな方法がありませんか?