为什么这个简单的主要方法在leiningen运行时永远不会返回?

7 clojure leiningen

这段代码立即返回:

user=> (dorun (pmap + [1 2] [3 4]))
nil
Run Code Online (Sandbox Code Playgroud)

但是,当我使用lein在main方法中运行相同的代码时:

(ns practice.core)

(defn -main [& args]
  (dorun (pmap + [1 2] [3 4])))
Run Code Online (Sandbox Code Playgroud)

它为什么永远不会回来?

有趣的是,如果我取代pmapmap,它正常返回.

mty*_*aka 9

您需要shutdown-agents-main方法结束时调用.

(defn -main [& args]
  (dorun (pmap + [1 2] [3 4]))
  (shutdown-agents))
Run Code Online (Sandbox Code Playgroud)

这在http://clojure.org/agents中提到:

请注意,使用代理会启动一个非守护程序后台线程池,以防止关闭JVM.使用shutdown-agents终止这些线程并允许关闭.

pmap 使用在代理线程池上运行的期货.