From 36dee5bcc4b8b0baec8d99231dde4a044771f2ea Mon Sep 17 00:00:00 2001 From: asahi Date: Mon, 24 Mar 2025 12:46:06 +0800 Subject: [PATCH] =?UTF-8?q?doc:=20=E9=98=85=E8=AF=BBdisposable=E6=96=87?= =?UTF-8?q?=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- spring/webflux/Reactor.md | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/spring/webflux/Reactor.md b/spring/webflux/Reactor.md index 202c18b..9f12bc4 100644 --- a/spring/webflux/Reactor.md +++ b/spring/webflux/Reactor.md @@ -151,4 +151,21 @@ Flux.range(5,3) [main]-5 [main]-6 [main]-Error Caught: fucking value {7} equals or greater than 7 -``` \ No newline at end of file +``` + +#### Disposable +上述`subscribe`方法的返回类型为`Disposable`,该接口代表subscriber对publisher的订阅是可取消的,如需取消订阅,调用`dispose`方法即可。 + +对于Mono和Flux而言,source publisher应该在接收到cancellation信号之后停止产生元素,`并不能保证取消信号是即时的`。(`若source产生数据的速度过快,可能在接收到cancel信号之前,source就已经complete`)。 + +`Disposables`类中存在一些对`Disposable`的工具方法,例如`swap`和`composite`。 + +#### BaseSubscriber +`subscribe`方法除了接收lambda外,还存在更通用的重载方法,接收`Subscriber`类型的参数。 + +在这种场景下,传参可以继承`BaseSubscriber`类。 + +并且,`BaseSubscriber`该类是一次性的,`其只能够订阅一个publisher,如果其订阅了第二个publisher,那么其对第一个publisher的订阅将会被取消`。 + +> `BaseSubscriber`只能订阅一个publisher的原因是reactive stream规范要求`onNext`方法不能被并行调用。 +