我的项目中有很多代码,比如Hit和静音,通过使用反应性扩展,就像这样:
IDisposable dsp = null;
dsp = TargetObservable.Subscribe((incomingContent) =>
{
if (incomingContent == "something")
{
myList.Add(incomingContent);
dsp.Dispose();
}
});首先,我担心线程安全,因为我的可观察到的线程很忙,并且有很多内容在一路推进,但后来有人告诉我,我应该结合ObserveOn(thread)来保证线程安全,我完全同意,所以让我们忘掉线程安全的事情吧。
在这里我想知道:
Take(count)、TakeWhile(预测)?OnComplete()调用,Dispose()将在内部调用,对吗?那么观察者和可观测对象之间的引用关系就会中断(因为我的可观测对象是一个长寿命的静态实例,引用会导致内存泄漏)。发布于 2013-09-23 09:04:15
我会避免遵循你在这里的模式。如果其他开发人员必须将全局状态与订阅/OnNext处理程序的内部函数混合使用,就很难理解问题空间。
您最好创建封装序列终止的TakeWhile/TakeUntilIncluding扩展方法。然后,你可以分开你的‘添加到列表’的关注。
另一种选择是超级简单:
var subscription = source.Where(x => x=="something")
.Take(1)
.Subscribe(incomingContent=>myList.Add(incomingContent));https://stackoverflow.com/questions/18953013
复制相似问题