Обычно да, но в вашем коде отсутствует одна важная часть: назначение планировщика.
На самом деле не имеет значения, оформлен ли какой-либо вызов, заключив его в Mono
. Важно то, в каком планировщике (потоке) выполняется этот код. Ваш код пропускает вызов .subscribeOn(boundedElastic())
.
(Schedulers.boundedElastic()
- хороший выбор для работы, связанной с блокировкой ввода-вывода).
В качестве альтернативы выполняется поток код можно изменить, позвонив по номеру .publishOn()
. Например, если вы имеете дело с существующим Flux<Path>
(вместо простого Path
значения, как в вашем случае), вы можете использовать .publishOn()
для переключения потоков и простой map()
для вызова метода блокировки. Например:
Mono.just(path).publishOn(Schedulers.boundedElastic()).map(Files::exists)
тоже достигает цели, но более некрасиво.