Clojure惯用于线程之间的同步

res*_*efm 5 clojure

我尝试解决的方案如下,我有一个测试程序,它将Web发送到系统上的Web端点.

该测试程序有一个运行的jetty Web服务器,它希望从外部系统进行回调,从而完成一个成功的测试周期.如果在特定时间范围(超时)内未收到回调,则测试失败.

为了实现这一点,我希望测试运行器等待jetty处理程序将在回调时设置的"事件".

我想过使用java的CyclicBarrier,但我想知道在clojure中是否有一种惯用的方法可以解决这个问题.

谢谢

Nik*_*zov 6

你可以用promise你最近询问:)这样的东西:

(def completion (promise))

; In test runner.
; Wait 5 seconds then fail.
(let [result (deref completion 5000 :fail)]
   (if (= result :success) 
     (println "Great!") 
     (println "Failed :(")))

; In jetty on callback
(deliver completion :success)
Run Code Online (Sandbox Code Playgroud)