scalaz.stream.time.awakeEvery(1.second)
1 秒ごとにイベントを作成するプロセスを作成できることを学びました。非常に明白です。次に、そのプロセスをマッピングして、毎秒何らかのタスクを達成できます。ここまでは順調ですね。
この活動を停止したい場合はどうすればよいですか? によって作成されたプロセスは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 をシャットダウンすることで停止できることがわかりましたが、もっとエレガントな方法はありませんか?