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))
}

然后以同样的方式进行成功检查。