java - doFinally 是否在 Reactor 中的同一线程上执行
问题描述
doFinally 是否在同一个线程上执行?下面的代码会阻塞主线程吗?
mono
.map(fileName -> asyncDownloadFile(fileName, folderName))
.doFinally(v -> {
FileUtils.cleanDirectory(folderName); // this method is blocking
});
如果是这样,在 doFinally 的单独线程中执行 cleanDirectory 的最佳方法是什么?
解决方案
将阻塞调用包装在 a 中Runnable
并在单独的thread
:
Runnable task = () -> {FileUtils.cleanDirectory(folderName)};
Mono<Object> cleanDirPromise = Mono.fromRunnable(task);
mono
.map(fileName -> asyncDownloadFile(fileName, folderName))
.doFinally(v -> {
cleanDirPromise.subscribeOn(Schedulers.parallel()).subscribe();
});
注意:这本质上是一个即发即弃的调用,您不会真正关心cleanDirPromise
.
推荐阅读
- javascript - 如果页面没有重新加载,函数执行两次
- c# - 从 Xamarin froms 中的 GestureRecognizers 获取 CommandParameter 值
- matplotlib - 在 matplotlib 中将图表添加到另一个图表
- asp.net-mvc - 如何在 MVC 项目的视图上添加日期选择器
- sql - 与 CTE 一起使用时行号损坏
- javascript - 无法在传单上使用图像叠加插件查看光栅图像(多波段卫星图像)
- python - 更改熊猫的轴替换填充
- docker - Rails 与 Docker-compose:如何设置数据库主机
- html - 如何更改 IOS 中圆角的样式问题?
- javascript - 如何在 amCharts 3 中协调“X”?