fs2:检查 Seq(任务)是否成功
fs2: Check for success of Seq(Task)
我有一个异步的 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))
}
然后以同样的方式进行成功检查。
我有一个异步的 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))
}
然后以同样的方式进行成功检查。