Потому что можно завершить Mono
с null
. В этом случае он сразу переходит в полное состояние с пустым (нулевым) содержимым:
T t = callable.call();
if (t == null) {
sds.onComplete();
}
else {
sds.complete(t);
}
Где:
@Override
public final void onComplete() {
countDown();
}
И когда вы называете это block()
, вы просто получаете null
value
от Mono
.
Дело в том, что в каналах ничего не будет обрабатываться, потому что состояние уже complete
. Итак, мы немедленно идем к возвращению null
.