【发布时间】:2017-02-16 11:39:45
【问题描述】:
我目前正在通过调用 Web 服务来获取视图模型中的数据:
_loadDataCommand = ReactiveCommand.CreateFromObservable(
() => Observable
.StartAsync(ct => _getAllFunction(ct))
.TakeUntil(_loadDataCancel));
_loadDataCancel 只是一个充当取消信号的IObservable<bool>。
目前,我已经有了它,以便在导航到 vm 时执行加载数据命令。
这对于特别昂贵的获取操作来说是有问题的,或者当用户只想导航并返回他们离开视图的状态时(例如,列表中的选定项目等)。
我真正想要做的是拥有它,以便命令 always 执行新的提取,但我希望有一个额外的 observable 我可以在 nav-to 上使用,它会:
- 从缓存中检索数据(如果存在)
- 如果数据不存在,则使用 LoadData observable(并插入缓存)
一些研究发现了关于 Memoize() 和 MemoizeAll() 之类的粗略信息,但是它们似乎在 rx 中不可用(但在 System.Interactive 中)。
在这里进行一些搜索,找到了这个答案:https://stackoverflow.com/a/12666462/639771,但是在查看 ReactiveUI 的主源代码之后,我现在再也找不到 ObservableAsyncMRUCache。
我有什么遗漏吗?我几乎可以肯定它会变得微不足道,但我完全不知所措。
PS:我知道 Akavache 存在,但它可能对我的需求来说有点太重了。
【问题讨论】:
标签: c# caching system.reactive observable reactiveui