如何创建一个Rx observable,当最后一个观察者取消订阅时,它会停止发布事件?

Seb*_*ood 6 publish-subscribe reactive-programming system.reactive

我将创建一个可观察的(通过各种方式)并将其返回给感兴趣的各方,但是当他们完成倾听时,我想拆除可观察的,以便它不会继续消耗资源.另一种将其视为在pub子系统中创建主题的方法.当没有人再订阅某个主题时,您不希望再持有该主题及其过滤.

Eni*_*ity 10

Rx已经有一个满足您需求的运营商 - 实际上是两个 - Publish&RefCount.

以下是如何使用它们:

IObservable xs = ...

var rxs = xs.Publish().RefCount();

var sub1 = rxs.Subscribe(x => { });
var sub2 = rxs.Subscribe(x => { });

//later
sub1.Dispose();

//later 
sub2.Dispose();

//The underlying subscription to `xs` is now disposed of.
Run Code Online (Sandbox Code Playgroud)

简单.