gpt4 book ai didi

multithreading - Groovy 并发 : A better way to aggregate results semantically?

转载 作者:行者123 更新时间:2023-12-01 09:39:00 24 4
gpt4 key购买 nike

我需要并行调用多个方法并等待结果。每个都依赖于不同的资源,因此它们可能会在不同的时间返回。我需要等到收到所有结果或在一定时间后超时。

我可以通过方法调用生成引用共享对象的线程,但有没有更好、更时髦的方法来做到这一点?

当前实现:

        Executors exec = Executors.newFixedThreadPool(10);

for (obj in objects) {
def method = {
def result = new ResultObject(a: obj, b: obj.callSomeMethod())
result
} as Callable<ResultObject>

callables << method
}

List<Future<ResultObject>> results = exec.invokeAll(callables)

for (result in results) {
try{
def searchResult = result.get()
println 'result retrieved'
} catch (Exception e)
{
println 'exception'
e.printStackTrace()
}
}
}

最佳答案

Groovier 解决方案是使用 GPars - 一个用 Groovy 编写的并发库。

import static groovyx.gpars.GParsExecutorsPool.withPool

withPool {
def callable = {obj -> new ResultObject(a: obj, b: obj.callSomeMethod())}.async()
List<ResultObject> results = objects.collect(callable)*.get()
}

关于multithreading - Groovy 并发 : A better way to aggregate results semantically?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2853842/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com