我想在Clojure中创建一些未来,并在一个特定的线程上运行它们,以确保它们一次运行一个。这可能吗?
包装Java库来实现这一点并不难,但在此之前,我希望确保不会遗漏Clojure的实现方式。在Java语言中,我可以通过实现FutureTask并将这些任务提交给单线程执行器来实现这一点。
发布于 2018-01-05 02:03:39
除了前面提到的promises之外,您还可以使用delay。Promise的问题是,你可能会意外地无法交付它们,并且会造成future和delay无法实现的死锁情况。未来和延迟之间的区别仅仅是执行工作的线程。有了未来,工作是在后台完成的,而在延迟的情况下,工作是由试图破坏它的第一线程完成的。因此,如果未来比承诺更合适,你总是可以这样做:
(def result-1 (delay (long-calculation-1)))
(def result-2 (delay (long-calculation-2)))
(def result-3 (delay (long-calculation-3)))
(defn run-calcs []
@(future
@result-1
@result-2
@result-3))https://stackoverflow.com/questions/47998199
复制相似问题