nha*_*nha 2 java asynchronous clojure completable-future
我正在与返回a的Java API接口CompletableFuture
.现在,如果我有这些数组[cf1 cf2 cf3 …]
,我怎么能给予他们所有一秒完成,并收集不论他们在一秒钟后产生的?
就像是:
(def vec-of-cf [cf1 cf2 cf3])
(get-all vec-of-cf 1000 ::timeout)
;; no more than 1 second later, I should have my vector of realized CompletableFuture, possibly holding a `::timeout` value if they did not have time to finish
Run Code Online (Sandbox Code Playgroud)
我认为这类似于Scala flatmap
(?).
您可以使用CompletableFuture.allOf
获取单个可完成的未来,您可以阻止等待所有它们完成或超时所需的时间(因此可能等待超过超时 - 所有任务最多一秒,不一定在一秒之后)然后迭代原始期货以获得它们的价值,如果它们完成:
(def vec-of-cf [cf1 cf2 cf3])
(let [all-of (CompletableFuture/allOf (into-array vec-of-cf))]
(try
(.get all-of timeout)
(catch java.util.concurrent.TimeoutException e))
(->> vec-of-cf
(filter #(.isDone %))
(map #(.get %))))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
148 次 |
最近记录: |