scala - fs2:检查 Seq(Task) 是否成功

标签 scala task scalaz http4s fs2

我有一个异步 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/

相关文章:

scala - 如何在多模块 gradle 项目中仅编译已更改(或相关)的模块

c# - 对 CancellationTokenSource.Cancel 的调用永远不会返回

typescript - VSCODE 任务 typescript TS5042 内部版本 : Option 'project' cannot be mixed with source files on a command line

task - 如何在一个作业的2个节点上运行不同的任务

scala - 在 Scala 中编写验证函数

scala - 声明类型不同时的不同行为(Set vs TreeSet)

xml - Scala:修改一个NodeSeq

scala - (在 Scala 中,)有什么可以用类的泛型类型参数来完成,但不能用抽象类型成员来完成的吗?

Scala 和 UnionType 绑定(bind)到泛型类型

scala - cats 是否具有来自 scalaz 的 traverseM 的等价物?