gpt4 book ai didi

scala - 如何按顺序执行scala future list

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

我想执行按顺序返回 future 的函数列表。

以下方法的可能实现是什么:

def runSequentially[A, B](lazyFutures: List[A ⇒ Future[B]])(input: A)
(implicit ec: ExecututionContext): Future[List[B]]

测试

test("execute futures sequentially") {
import scala.concurrent.ExecutionContext.Implicits.global

def runSequentially[A, B](lazyFutures: List[A ⇒ Future[B]])(input: A): Future[List[B]] = ???

val l: List[Unit ⇒ Future[Unit]] = List(
_ ⇒ Future { Thread.sleep(1000); println(1) },
_ ⇒ Future { Thread.sleep(5000); println(2) },
_ ⇒ Future { Thread.sleep(500); println(3) }
)

Await.result(runSequentially(l)(5), 20.seconds)

}

这应该打印:

1
2
3

最佳答案

尝试用一个线程创建一个池并像这样使用 Future.traverse

implicit val singleThreadEc: ExecutionContext = 
ExecutionContext.fromExecutor(Executors.newSingleThreadExecutor())

def runSequentially[A, B](lazyFutures: List[A ⇒ Future[B]])(input: A): Future[List[B]] =
Future.traverse(lazyFutures)(f => f(input))

关于scala - 如何按顺序执行scala future list ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56708181/

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