假设我们需要基于Flux
资源的内容创建一个Closeable
。
为了清楚起见,假设有一个BufferedReader
要转换为Flux<String>
。
BufferedReader reader = createReader("my_resource_path");
Flux<String> flux = Flux.fromIterable(() -> iteratorOfLines(reader));
让我们假设iteratorOfLines
产生一组有限的项目。
当BufferedReader
消耗掉了其中的所有数据,或者由于某种原因不需要剩余的数据(即订阅被中止)时,我正在寻找一种关闭Flux
的方法。
有一个构造函数reactor.core.publisher.FluxIterable(Iterable iterable, Runnable onClose)
,但是:
在Flux.fromIterable
发布最后一项之后,清理/关闭资源的正确方法是什么?
可能有比fromIterable
更好的方法来做类似的事情,因此欢迎所有选择。
答案 0 :(得分:2)
要尝试使用资源,您可以使用using
Flux.using(
//Set up resource
() -> createReader("my_resource_path"),
//Create flux from resource
reader -> Flux.fromIterable(iteratorOfLines(reader)),
//Perform action (cleanup/close)
//when resource completes/errors/cancelled
reader -> {
try{
reader.close();
}catch(IOException e){
throw Exceptions.propagate(e);
}
}
);