मैं सिमुलेशन के साथ टकरा रहा हूं जहां मेरे पास कुछ रोबोट और नियंत्रक हैं, नियंत्रक ने फैसला किया है कि क्या करना है और रोबोट को नौकरियां सौंपना है, तकनीकी रूप से दुर्व्यवहार मूल रूप से मुझे एजेंटों की स्थिति परवाह नहीं है, मुझे बस इस तथ्य की परवाह है कि यह क्रम में भेजे गए एफएनएस निष्पादित करेगा और मैं उनके लिए समाप्त होने का इंतजार कर सकता हूं।नौकरियों को सिंक्रनाइज़ करने के लिए एजेंटों का उपयोग
काफी बाद यह दर्शाता है कि मैं क्या हासिल करने की कोशिश कर रहा हूँ, नियंत्रक एक बड़ा काम प्रत्येक रोबोट यह का एक हिस्सा हो जाता है हो जाता है,
(def *agents* (reduce
(fn[h v] (assoc h v (agent true)))
{:control (agent true)} (range 0 5)))
(defn send-job [id f]
(send-off (*agents* id)
(fn [s f]
(try
(f)
(catch Exception e (println e))))
f))
(defn await-job [id]
(await (*agents* id)))
(send-job :control
(fn []
(send-job 0 (fn []
(Thread/sleep 10)
(println "0 Done.")))
(send-job 1 (fn []
(Thread/sleep 2)))
(await-job 1)
;; 0 still running.
;; do other stuff...
))
खैर समस्या आप से नहीं भेज बंद कर सकते हैं एक send- के भीतर है मैं "एजेंट कार्रवाई में इंतजार नहीं कर सकता" मिलता है। क्या क्लोजर के समवर्ती उपकरण का उपयोग करके ऐसा करना संभव है या क्या मुझे संरचना जैसे एजेंट को फिर से लागू करना है?