gpt4 book ai didi

multithreading - 从使用一系列 future 的方法返回计算列表

转载 作者:行者123 更新时间:2023-12-03 13:15:05 25 4
gpt4 key购买 nike

我想从使用 future 列表的方法返回计算列表:

def foo: List[Long] = {
val res = List(1, 2, 3) map {
x => Future { someCalculation(x) }
}

Future.sequence(res)
// what to do next?
}


def someCalculation(a: Int): Long = //....

我怎样才能做到这一点?

最佳答案

了解 future 时有一个关键点:如果您想从Future[T]转到T,则需要等待操作的结果,但这是您要避免不影响程序性能的事情。正确的方法是使与异步抽象保持尽可能多的工作,并将阻塞向上移动到调用堆栈。

Future类具有许多方法,可用于链接其他异步操作,例如map,onComplete,onSuccess等。

如果您确实需要等待结果,那么可以使用Await.result

val listOfFutures:List[Future[Long]] =   val res = List(1, 2, 3) map {
x => Future { someCalculation(x) }
}

// now we have a Future[List[Long]]
val futureList:Future[List[Long]] = Future.sequence(listOfFutures)

// Keep being async here, compute the results asynchronously. Remember the map function on future allows you to pass a f: A=>B on Future[A] and obtain a Future[B]. Here we call the sum method on the list
val yourOperationAsync:Future[Long] = futureList.map{_.sum}

// Do this only when you need to get the result
val result:Long = Await.result(yourOperationAsync, 1 second)

关于multithreading - 从使用一系列 future 的方法返回计算列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21159260/

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