Sha*_*awn 0 c# multithreading thread-safety system.reactive
我的项目中有很多代码,如Hit和静音,通过这种方式使用Reactive扩展:
IDisposable dsp = null;
dsp = TargetObservable.Subscribe((incomingContent) =>
{
if (incomingContent == "something")
{
myList.Add(incomingContent);
dsp.Dispose();
}
});
Run Code Online (Sandbox Code Playgroud)
首先,我担心线程的安全性,因为我的Observable非常繁忙并且一直有大量内容推送,但后来,我被告知我应该结合ObserveOn(thread)保证线程安全,我完全同意,所以让我们忘记了线程安全的事情.
在这里,我想知道:
Take(count)'TakeWhile(预测)'?OnComplete()被调用,Dispose()将在内部调用,对吗?然后Observer和Observable之间的引用关系将中断(因为我的observable是一个长寿命的静态实例,引用会导致内存泄漏).我会避免遵循你在这里的模式.如果其他开发人员必须将全局状态与subscribe/OnNext处理程序的内部函数混合,则很难理解问题空间.
你最好创建封装序列终止的TakeWhile/ TakeUntilIncludingextension方法.然后,您可以将"添加到列表"中的问题分开.
另一个需要做的事情就是超级简单:
var subscription = source.Where(x => x=="something")
.Take(1)
.Subscribe(incomingContent=>myList.Add(incomingContent));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
406 次 |
| 最近记录: |