何时调用可观察量的处置



我的项目中有很多代码,例如使用反应式扩展命中和静音,如下所示:

    IDisposable dsp = null;
    dsp = TargetObservable.Subscribe((incomingContent) =>
    {
        if (incomingContent == "something")
        {
            myList.Add(incomingContent);
            dsp.Dispose();
        }
    });

首先,我担心线程安全,因为我的 Observable 非常忙并且一直有一堆内容推送,但后来,我被告知我应该与ObserveOn(thread)结合使用以保证线程安全,我完全同意,所以让我们忘记线程安全的事情。

在这里我想知道:

  1. 我应该如何或何时调用可观察的处置。
  2. 满足命中和静音的正确方法是什么,结合一些完整的扩展方法,如Take(count),"TakeWhile(预测)"?
  3. 如果调用OnComplete()Dispose()将在内部调用,对吗?然后观察者和可观察对象之间的引用关系将中断(因为我的可观察对象是一个长寿命的静态实例,引用会导致内存泄漏)。

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

最好创建封装序列终止的 TakeWhile/TakeUntilIncluding 扩展方法。然后,您可以将"添加到列表"问题分开。

一个交替的事情是超级简单:

var subscription = source.Where(x => x=="something")
                         .Take(1)
                         .Subscribe(incomingContent=>myList.Add(incomingContent));

相关内容

  • 没有找到相关文章

最新更新