>我有一个异步 http4s 客户端,在运行一些请求后,我从中获取结果集合。我想检查此集合(Seq[Task[Response]]
(是否已完成所有Task
对象,以及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))
}
然后以相同的方式进行成功检查。