我试图了解什么时候是在传递给 Observable.Create
的函数中返回一次性资源的好时机,而只是通过 using
处理范围内的任何资源声明。
对于 Observable
是无限流的情况,是否返回更多的一次性?即使是这样,我也不明白即使流过早关闭,using
block 仍然不会处置资源
最佳答案
我认为 Observable 范例上的 Disposable 接口(interface)仅用于摆脱订阅的目的(即停止对观察到的事件的回调),正如 Theodor Zoulias 指出的那样。它不管理流上的任何资源。您可能会混淆 Disposable 接口(interface)在其他场景中的使用。
关于处理订阅:
我可以看到返回 Disposable 的一个用例是当你有多个调用函数时:假设你有一个 Observable 列表,你可以迭代它并调用函数 .Dispose()一次取消多个订阅。
您还可以将该流作为可释放对象传递给另一个 Observable,以便在某些事件发生时被释放。由于整个 RX 范式是关于不知道什么时候会执行的,这很有趣。我在一个应用程序中工作,如果某个事件发生,我必须取消订阅,并且我将 Observable 订阅 (IDisposable) 传递给此类事件/流的观察者。
这几行:
IDisposable subscription1 = observableOne.Subscribe(_ => # code omitted);
observableTwo.Subscribe(_ => {
subscription1?.Dispose();
subscription1 = null;
});
正如 Enigmaticy 所指出的,虽然这体现了我的观点,但实现这一点的更好方法是:
observableOne.TakeUntil(observableTwo).Subscribe(_ => #code ommited);
我有一段时间没有使用 C#,但这些是我可以看到的使用 vs Disposable 作为对象的用例。它使您可以更灵活地决定何时取消订阅:~
关于C# Reactive Extensions - 我应该退回一次性的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59110678/