其他分享
首页 > 其他分享> > 扩展名-返回相同的可观察值还是创建新的?

扩展名-返回相同的可观察值还是创建新的?

作者:互联网

我正在尝试使用Rx设计服务层抽象.我已经使用FromAsyncPattern打包了所有Web服务调用.我将有多个ViewModel订阅这些可观察对象,有些可以有多个订阅.

>应该创建只读IObservable< T>我的ServiceProxy类(单例)中的属性,并在构造函数中构造一次,还是应该每次在服务方法中创建新的可观察对象并返回它们?
>有关系吗?

解决方法:

Does it matter ?

在这种情况下,不会.这是冷的可观察对象(例如Create返回的内容)和热的可观察对象之间的区别. FromAsyncPattern返回一个AsyncSubject,这意味着它将“重播”结果给任何订阅者(因此,它很冷,但并不完全相同,更像是“冷”).

另一方面,Create最终将为每个订阅者重新运行代码(就像您有L2S查询一样,对其运行Foreach会发出另一个数据库调用).有时这就是您想要的,有时不是.

要将冷的观测值变成热的观测值,请将其添加到末尾:

.Multicast(new Subject<TTheType>()).RefCount();

而且,如果您想获取高温的Observable(例如Observable.Start)并将其变冷,请使用Defer:

var coldObs = Observable.Defer(() => 
    Observable.Start(() => doSomethingAndReturnAValue()));

这意味着,每次有人订阅coldObs时,都会调用doSomethingAndReturnAValue.

标签:system-reactive,wpf,c,mvvm
来源: https://codeday.me/bug/20191102/1988891.html