C# 反应式扩展/UI缓存web请求数据
我当前正在通过调用web服务获取视图模型中的数据:C# 反应式扩展/UI缓存web请求数据,c#,caching,system.reactive,observable,reactiveui,C#,Caching,System.reactive,Observable,Reactiveui,我当前正在通过调用web服务获取视图模型中的数据: _loadDataCommand = ReactiveCommand.CreateFromObservable( () => Observable .StartAsync(ct => _getAllFunction(ct)) .TakeUntil(_loadDataCancel)); \u loadDataCancel只是一个作为取消信号的IObservable 目前
_loadDataCommand = ReactiveCommand.CreateFromObservable(
() => Observable
.StartAsync(ct => _getAllFunction(ct))
.TakeUntil(_loadDataCancel));
\u loadDataCancel
只是一个作为取消信号的IObservable
目前,我已经得到了它,这样当一个vm被导航到时,load data命令就会被执行
对于特别昂贵的获取操作,或者当用户只想导航并返回到他们留下视图的状态(例如列表中的选定项等)时,这是有问题的
我真正想做的是,让命令始终执行新的提取,但我想在nav to上使用一个额外的可观测值,这将:
Memoize()
和MemoizeAll()
但是,它们在rx中似乎不可用(但在System.Interactive中)
在这里搜索,找到了这样的答案:,但是在查看了ReactiveUI的主源代码之后,现在我再也找不到ObservableSyncRucache
有什么我遗漏的吗?我几乎可以肯定这会变得很琐碎,但我完全不知所措
PS:我知道阿卡瓦什是存在的,但它对我的需求来说可能有点太重了。我觉得有几种方法可以实现这一点,这取决于更多的因素,但这基本上是你想要的吗
IObservable<Object> GetFromServer()
{
//Get From Server
//Store in Cache
}
IObservable<Object> GetFromCache()
{
return //returns something from cache or just return null;
}
...
GetFromCache()
.SelectMany(result =>
{
if (result == null)
return GetFromServer();
return Observable.Return(result);
});
GetFromServer()
.Replay(1);