1

MutableSharedFlow 采用 3 个参数:replay、extraBufferCapacity 和 onBufferOverflow。replay 和 extraBufferCapacity 有什么区别?

该文档提到以下内容:

replay - 重播给新订阅者的值的数量(不能为负数,默认为零)。

extraBufferCapacity - 除了重放之外缓冲的值的数量。当有剩余的缓冲区空间时,emit 不会挂起(可选,不能为负数,默认为零)。

我不完全理解 2 和何时需要 extraBufferCapacity > 0 之间的区别。 extraBufferCapacity 只是发射器的额外重放能力吗?

4

1 回答 1

2

extraBufferCapacity 只是发射器的额外重放能力吗?

“重播”术语只对订阅者有意义,而不是发射者。该replay参数定义了新订阅者在订阅时将收到多少过去的值。这显然意味着需要存储这些值,因此整个缓冲区至少需要这么大。

但是,缓冲区大小作为一个整体会影响发射器。完整缓冲区的确切结果取决于onBufferOverflow,但此缓冲区大小可用于控制发射器的背压(减慢它们的速度)或我们如何丢弃消息。使用更大的缓冲区,您可以像任何常规缓冲区一样允许发射器在不减慢它们速度的情况下进行突发发射。

现在,选择拥有更大的缓冲区不应强迫您将这些缓冲值重播给新订阅者,因此extraBufferCapacity. 使用extraBufferCapacity > 0,您可以定义任何所需大小的缓冲区,而无需强制您重放尽可能多的值,只需使用以下公式:

bufferSize = replay + extraBufferCapacity

例如,您可以决定根本不向新订阅者重播任何值,但仍然通过拥有一些(非重播)缓冲区来允许发射器的突发。

于 2022-03-01T13:39:29.087 回答