是否有可能使 `ReplaySubject` 到 运行 被订阅时关闭?

Is it possible to make `ReplaySubject` to run a closure on being subscribed to?

我想创建一个冷的可观察对象,只有在有实际订阅的情况下才会开始执行昂贵的操作。 ReplaySubject 非常适合,除了我需要能够在实际订阅时而不是在创建可观察对象时启动昂贵的后台操作的部分。有办法吗?某种 onSubscribed { ... } 方法。

这里有几个选项:

将昂贵的操作添加到 Observable 和订阅之间的 doOn(onSubscribe:)

let observable = Observable.of(1, 2)
    .doOn(onSubscribe: { _ in
        expensiveOperation()
    })

observable
    .subscribeNext { e in
        print(e)
    }

使 Observable 可连接并分离 doOn(onSubscribe:):

let observable = Observable.of(1, 2)
    .publish()

observable
    .doOn(onSubscribe: { _ in
        expensiveOperation()
    })
    .subscribe()

observable
    .subscribeNext { e in
        print(e)
    }

observable.connect()