我想通过 clojure 中的 claypoole 库将要评估的表单作为未来传递给目标线程池。
我尝试将函数主体传递给线程池,并且我希望该函数主体在线程上而不是内联上进行评估。
我的代码如下所示:
(defn in-thread [thread & body] (claypoole/future thread body))
它的调用方式如下:
(defonce pool (claypoole/threadpool 20))
(defn do-something [pool]
(in-thread pool
(Thread/sleep 5000)
(println "foo")))
经过一些测试,我得出的结论是,body
当我调用时,正在评估in-thread
,这使得我的整个解决方案实际上没有做任何有意义的事情。我知道我缺少某种基本概念,但每次我尝试研究宏时,我的头就开始旋转。
我如何将in-thread
函数变成一个宏,将函数主体而不是结果传递到线程池中执行?