concurrency - 如何防止未交付的 promise 挂起?

标签 concurrency clojure

这是一个来自 clojure 的勇敢而真实的例子:

(time
 (let [butter-promise (promise)]
   (doseq [butter [yak-butter-international butter-than-nothing baby-got-yak]]
     (future (if-let [satisfactory-butter (satisfactory? (mock-api-call butter))]
               (deliver butter-promise satisfactory-butter))))
   (println "And the winner is:" @butter-promise)))

如果没有黄油产品满足我们的标准怎么办?

最佳答案

(let [butter-promise (promise)]
  ;; ...
  (if-let [winner (deref butter-promise 10000 nil)]
    (println "And the winner is:" winner)
    (println "Butter timed out."))

关于concurrency - 如何防止未交付的 promise 挂起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30382601/

相关文章:

c++ - 将执行从一个线程转移到另一个线程以实现任务并行性和 future 调用

java - 如何使用 La Clojure 插件在 Java 项目中创建 clojure 文件?

performance - Clojure 应用程序启动性能

recursion - 循环/递归和递归本身有什么区别?

C中链表的并发修改

java - 数据库基准: Weird results when testing concurrency (ExecutorService)

java - 尽管进行了 null 检查,但在多线程环境中仍获取 NullPointerException

java - ConcurrentHashMap 上的竞争条件问题

java - 如果存在强引用,保证返回现有对象的线程安全对象池?

clojure - 与 Overtone 的理论相关设施相结合的学习音乐理论的最佳资源是什么?