doc: 阅读Sinks.one()和Sinks.empty()文档

This commit is contained in:
asahi
2025-04-18 12:53:55 +08:00
parent f57adf0481
commit e71cde7bb8

View File

@@ -76,7 +76,11 @@
- [Sinks.many().multicast().onBackpressureBuffer(args?)](#sinksmanymulticastonbackpressurebufferargs)
- [autoCancel](#autocancel)
- [Sinks.many().multicast().directAllOrNothing()](#sinksmanymulticastdirectallornothing)
>>>>>>> 8d41980 (doc: 阅读transient errors文档)
- [Sinks.many().multicast().directBestEffort()](#sinksmanymulticastdirectbesteffort)
- [Sinks.many().replay()](#sinksmanyreplay)
- [Sinks.unsafe().many()](#sinksunsafemany)
- [Sinks.one()](#sinksone)
- [Sinks.empty()](#sinksempty)
# Reactor
## Reactive Programming
@@ -1160,6 +1164,38 @@ Sinks的类别包括
在`Sinks.many()`终止后(通常是通过调用`emitError, emitComplete`方法其仍然允许新的subscriber对其进行订阅但是只会对新订阅者replay termination signal。
#### Sinks.many().multicast().directBestEffort()
对于该类型的`multicast Sinks.Many`,若`subscriber is too slow`(该subscriber的demand为0),那么该`onNext`信号`仅会针对该slow subscriber`进行丢弃。
但是,`slow subscribers`并不会被终止,一旦`slow subscribers`开始请求数据,其会重新开始接收新推送的数据。
当`Sinks.Many`被`emitError, emitComplete`终止后其仍然允许新的subscribers对其进行订阅但是对新订阅的订阅者只会向新订阅者发送termination signal。
#### Sinks.many().replay()
一个`replay Sinks.Many`可以将已发送元素进行缓存并且对后续的subscriber进行replay。
`replay Sinks.Many`可以通过如下方式进行创建:
- 缓存指定数量的历史数据`Sinks.many().replay().limit(int)`
- 缓存所有历史数据,没有上限限制`Sinks.many().replay().all()`
- 基于time-based window进行缓存`Sinks.many().replay().limit(Duration)`
- hisotry size limit和time window相结合`Sinks.many().replay().limit(int, Duration)`
除此之外,`Sinks.many().replay()`还包含其他的重载方法,例如可以通过`latest()`和`latestOrDefault()`对单个元素进行缓存和replay
#### Sinks.unsafe().many()
`Sinks.unsafe().many()`返回的`Sinks.Many factory`并不会提供producer thread safety在使用`Sinks.unsafe().many()`时,需要确保对`可能导致onNext, onComplete, onError方法`的调用需要保证外部的同步以确保其满足reactive stream规范。
#### Sinks.one()
该方法会简单创建一个`Sinks.One<T>`实例,该实例可以看作`Mono<T>`并且其emit方法和`many`稍有不同:
- `emitValue(T value)`: 产生一个`onNext(value)`信号,并且,在大多数实现中会产生一个`onComplete`信号
- `emptyEmpty()` 只会产生一个`onComplete`信号,其和`empty Mono`等效
- `emitError(Throwable t)`:产生一个`onError(t)`信号
#### Sinks.empty()
该方法会创建一个`Sinks.Empty<T>`实例,`Sinks.Empty`和`Sinks.One`类似,但是`Sinks.Empty`不提供`emitValue`方法。
`Sinks.Empty`无法触发onNext但是仍可以指定`<T>`泛型类型。