2

我有一个异步 http4s 客户端,在运行一些请求后,我从中获得了一组结果。我想检查Seq[Task[Response]]所有对象的此集合 (a) 是否已完成Task,并且Response对象是否处于特定状态。

如果我使用Future而不是任务,我会做类似的事情

val results: Seq[Future[Response]] = ...
Future.sequence(results).map(_.forall(_.customFunction.isSuccess))

fs2.Task有没有办法使用代替来实现类似的功能?在我有限的理解中,我假设在某些时候我将不得不调用unsafeRun,这将阻塞Task集合中的每个。

4

1 回答 1

3

你可以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))
}

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

于 2017-11-20T17:54:56.893 回答