【发布时间】:2017-07-30 17:41:24
【问题描述】:
我正在使用
(def f
(future
(while (not (Thread/interrupted))
(function-to-run))))
(Thread/sleep 100)
(future-cancel f)
在指定时间(100 毫秒)后取消我的代码。
问题是,我还需要取消已经运行的函数“函数运行”,重要的是它在 100 毫秒后真正停止执行该函数。
我可以以某种方式将中断的信号传播到函数吗?
函数不是第三方的,我自己写的。
【问题讨论】:
-
我完全修改了我的答案,可能想看看它是否适用于您的用例。
-
对我来说,运行代理而不是未来对您的用例来说似乎要好得多。 IE。如果应该发出代理的下一次迭代,您可以控制一个原子:
(if @running (send *agent* nil))(因此您甚至不需要while循环)。您可以在运行的函数中随时检查原子的状态,并在必要时提前返回。 (参见 Rich Hickey 著名的 ants.clj 示例。)
标签: clojure future cancellation