Mono.fromCallable 默认在调用线程上执行?

Eri*_*ert 5 java project-reactor

我正在尝试使用 Project Reactor 执行异步操作,Mono.fromCallable(Callable)并且我注意到,在我的测试用例中,它似乎正在调用线程上运行。它是否记录Mono.fromCallable(Callable)在默认情况下使用调用线程的地方?

我从Reactor 参考指南最佳实践中看到我应该执行如下操作:

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

但我没有看到Schedulers.immediate()默认使用的任何地方。为什么不默认为Schedulers.boundedElastic()

Phi*_*lay 4

反应堆用户指南的线程和调度程序部分与您的问题相关(强调我的问题):

获得aFlux或aMono并不一定意味着它运行在专用的Thread中。相反,大多数运算符继续在前一个运算符执行的线程中工作。除非指定,否则最顶层的运算符(源)本身在进行subscribe()调用的线程上运行。

.subscribeOn(...)运算符将导致Callable在指定的调度程序上调用上游,而不是subscribe()在进行调用的线程上调用。

Callable默认情况下,传递给的对象.fromCallable不会在另一个 Scheduler 上运行,因为所有Callables 不一定都会阻塞。因此,在很多情况下,没有理由Callable在另一个调度程序上执行。