在Clojure中创建一个在后台循环执行更新共享引用并管理其生命周期的线程,有没有惯用的方式?我发现自己在使用future
实现这个功能,但感觉有点像是一种不太正式的hack,因为我从来没有返回过有意义的值。例如:
(future (loop [] (do
(Thread/sleep 100)
(dosync (...))
(recur))))
同时,我需要小心地在后台处理不再需要时进行future-cancel
。在Clojure/Swing应用程序中如何编排这一点的任何提示都将是不错的选择。例如,在我的UI中添加一个虚拟的JComponent
,负责在窗口关闭时终止线程可能是一个好主意。
future-cancel
或设置“请取消”标志实际上是一回事。 我仍然需要确保它在正确的时间和健壮的方式下发生。(我想念 RAII) - pauldoodo
和while
的其他观点当然是正确的。 :) - pauldoo