我有一个异步 http4s 客户端,在运行一些请求后,我可以从中获取结果集合。我想检查所有 Task
对象的该集合(Seq[Task[Response]]
)是否已完成,以及 Response
对象处于特定状态。
如果我使用 Future
而不是 Task,我会做类似的事情
val results: Seq[Future[Response]] = ...
Future.sequence(results).map(_.forall(_.customFunction.isSuccess))
有没有办法使用fs2.Task
来实现类似的功能?根据我有限的理解,我假设在某些时候我将不得不调用 unsafeRun
,这将阻止集合中的每个 Task
。
最佳答案
您可以将 Future.sequence
替换为以下内容:
val results: Seq[Task[Response]] = ...
val sequence: Task[Seq[Response]] = results.foldLeft(Task.now(Seq.empty[Response])) {
(x, t) => x.flatMap(s => t.map(r => s :+ r))
}
然后以同样的方式进行成功检查。
关于scala - fs2:检查 Seq(Task) 是否成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47396295/