首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >何时调用Dispose以获取可观察到的

何时调用Dispose以获取可观察到的
EN

Stack Overflow用户
提问于 2013-09-23 06:30:44
回答 1查看 450关注 0票数 0

我的项目中有很多代码,比如Hit和静音,通过使用反应性扩展,就像这样:

代码语言:javascript
复制
    IDisposable dsp = null;
    dsp = TargetObservable.Subscribe((incomingContent) =>
    {
        if (incomingContent == "something")
        {
            myList.Add(incomingContent);
            dsp.Dispose();
        }
    });

首先,我担心线程安全,因为我的可观察到的线程很忙,并且有很多内容在一路推进,但后来有人告诉我,我应该结合ObserveOn(thread)来保证线程安全,我完全同意,所以让我们忘掉线程安全的事情吧。

在这里我想知道:

  1. 我应该怎样或者什么时候叫处理人员来做一个可观察的。
  2. 什么是满足Hit和静音的正确方法,结合一些完全可扩展的方法,比如Take(count)、TakeWhile(预测)?
  3. 如果OnComplete()调用,Dispose()将在内部调用,对吗?那么观察者和可观测对象之间的引用关系就会中断(因为我的可观测对象是一个长寿命的静态实例,引用会导致内存泄漏)。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-23 09:04:15

我会避免遵循你在这里的模式。如果其他开发人员必须将全局状态与订阅/OnNext处理程序的内部函数混合使用,就很难理解问题空间。

您最好创建封装序列终止的TakeWhile/TakeUntilIncluding扩展方法。然后,你可以分开你的‘添加到列表’的关注。

另一种选择是超级简单:

代码语言:javascript
复制
var subscription = source.Where(x => x=="something")
                         .Take(1)
                         .Subscribe(incomingContent=>myList.Add(incomingContent));
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18953013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档