C# Reactive Extensions - 我应该退回一次性的吗?

标签 c# reactive-programming system.reactive

我试图了解什么时候是在传递给 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/

相关文章:

.net - 如何使用 Socket 和 Reactive 扩展(Rx)从连接的客户端套接字获取接收到的消息缓冲区

java - 以功能 react 方式合并 2 个列表

c# - 如何对 Observable.Sample() 进行单元测试?

c# - 如何监控新上传文件的 FTP 传入文件夹?

C# - 读取 double 值

c# - 具有通用类型的 MS CRM 自定义工作流事件输出

c# - 依赖注入(inject) : How to configure interface bindings for wrapping

c# - 大型机平面文件到 C# 类

javascript - 在react.js中使用路由时,向 `component`提供的 Prop `Route`无效

.net - Observables vs Tasks - 首选实现?