流处理与增量 I/O 全解析
1. 可扩展的拉取和流
take 操作引入了新的作用域。当 take 对其源进行部分求值时,源的 Done 情况不会出现,但 take 引入的作用域会结束,整个子树会关闭,包括部分求值的源流期间分配的所有资源。
以下是相关代码示例:
def file(path: String): Stream[Task, Source] =
Stream.resource(Task(Source.fromFile(path)))(s => Task(s.close()))
def lines(path: String): Stream[Task, String] =
file(path).flatMap(source =>
Stream.eval(Task(source.getLines)).flatMap(Stream.fromIterator)
)
def fileWriter(path: String): Stream[Task, BufferedWriter] =
Stream.resource(
Task(Files.newBufferedWriter(Paths.get(path))))(w => Task(w.close()))
def writeLines(path: String): Pipe[Task, String, Unit] =
lines => fileWriter(path).flatMap(w
超级会员免费看
订阅专栏 解锁全文
4367

被折叠的 条评论
为什么被折叠?



