java - 项目反应堆:是否有无副作用的finally方法(不是副作用方法doFinally)
问题描述
给出这样一个例子:
Mono.create(callback -> {
try { callback.success(someLogic()); }
catch (Exception e) { callback.error(e); }
})
.doFinally((v) -> Mono.fromRunnable(() -> {
Thread.sleep(1000); // In reality, we have a blocking I/O code here and needs to be executed on a separate thread
}).block())
.block();
当我运行此代码时,它会立即完成,而无需等待 1000 毫秒的延迟。这是因为doFinally
它是一种副作用方法,因此它不会作为链的一部分执行。是否有可以作为链的一部分执行的 finally like 方法?
我目前的解决方法是
Mono.create(callback -> {
try { callback.success(someLogic()); }
catch (Exception e) { callback.error(e); }
})
.then(Mono.fromRunnable(() -> {
Thread.sleep(1000);
}))
.onErrorResume(e -> Mono.fromRunnable(() -> {
Thread.sleep(1000);
}))
.block();
如果没有这样的方法,还有更好的方法吗?
解决方案
推荐阅读
- c# - 是否可以立即停止 threading.Timer?
- sql - 在单个子句中使用 IN 进行多个连接
- html - 仅在收到 get 函数的响应后,如何使用 Angular 生成 HTML 页面
- swift - 如何在 Swift 中解决“无法推断通用参数'T'”
- python - 从python中的列表列表中提取列表
- c++ - 在循环内调用 MPI_Reduce 时出现致命错误
- mysql - 创建跨多个列具有相互唯一性的表
- c++ - 为什么编译行错误导致无法找到头文件
- python-3.x - Pyhon 记录 TimedRotatingFileHandler 日志文件锁定功能
- c++ - 错误:变量“Point a”具有初始化程序但类型不完整。我的代码有什么问题?