Mono.fromCallable выполняется на вызывающем потоке по умолчанию? - PullRequest
0 голосов
/ 04 октября 2019

Я пытаюсь выполнить асинхронную операцию, используя Project Reactor Mono.fromCallable(Callable), и я заметил, что в моем тестовом примере он работает в вызывающем потоке. Задокументировано ли где-то, что Mono.fromCallable(Callable) использует вызывающий поток по умолчанию?

Я вижу из справочника Справочное руководство по Reactor Я должен сделать что-то вроде следующего:

Mono blockingWrapper = Mono.fromCallable(() -> { 
    return /* make a remote synchronous call */ 
});
blockingWrapper = blockingWrapper.subscribeOn(Schedulers.boundedElastic()); 

Но я нигде не вижу, чтобы Schedulers.immediate() использовался по умолчанию. Почему не по умолчанию Schedulers.boundedElastic()?

1 Ответ

0 голосов
/ 04 октября 2019

Раздел Threading and Schedulers руководства пользователя реактора имеет отношение к вашему вопросу (выделено мое):

Получение Flux или Mono необязательно означает, что он запускается в отдельной теме. Вместо этого большинство операторов продолжают работать в потоке, в котором выполнялся предыдущий оператор. Если не указано, самый верхний оператор (источник) сам работает в потоке, в котором был сделан вызов subscribe().

Оператор .subscribeOn(...) вызовет восходящий поток Callable, который будет вызван в указанном планировщике, вместо потока, в котором был сделан вызов subscribe().

Callable, переданный в .fromCallable, не запускается в другом планировщике по умолчанию, поскольку всеCallable s не обязательно блокировать. Поэтому во многих случаях нет причин выполнять Callable на другом планировщике.

...