将 Observable 写入文件

Writing an Observable to file

我目前有以下代码:

val writer: PrintWriter = ???
val linesObservable: Observable[String] = ???

val future: CancelableFuture[Unit] = linesObservable.foreach(writer.write)

writer.close()

我的目标是消除上述代码段中的所有副作用。

从功能的角度来看,writer 应该充当 future 的资源/支架。

因为我使用的是 Monix 版本 3.0.0-RC2,所以有新的 bracket 方法可用于 ObservableTask(可能更多 类),这可能是我正在寻找的东西 - 但我还不太清楚。

是的,你是对的。最好获取 PrintWriter 作为资源,以便在完成写入后可以干净地关闭它。

val writer: Resource[Task, PrintWriter] = 
  Resource.make[Task, PrintWriter](???)(pw => Task.delay(pw.close()))

val linesObservable: Observable[String] = ???

writer.use { pw =>
  linesObservable.foreachL(pw.write)
}