[英]Autosave with RX in C#
我想实现一个自动保存功能。 我有两个 Observable:
IObservable<Unit> changes
:每次用户编辑文本时发出一个项目IObservable<Unit> saves
:每次按下保存按钮时发出保存事件现在我想将它们组合成第三个流writeBack 。 该流有一个订阅者,它将当前文本写入数据库。
我如何创建 writeBack 流,以便它满足以下属性?
我想确保只写回未保存的更改。 如果出现以下情况,我不想保存文本:
这应该这样做。 首先,我们确定我们可能想要保存的时间:
var saveTriggers = changes.Throttle(TimeSpan.FromSeconds(3))
.Merge(saves);
接下来,我们将它们过滤掉以确保它们符合您的逻辑:每次保存之间至少进行一次编辑,并且保存不能先进行。 SkipWhile
只是为了确保忽略更改之前的保存。 Scan
计算每次保存之间的更改次数。 我们只关心该数字何时变为 0(表示触发了保存)。 并且DistinctUntilChanged
过滤掉连续的保存。
var actualSaves = saveTriggers.Select(_ => EventType.SaveTrigger)
.Merge(changes.Select(_ => EventType.Edit))
.SkipWhile(et => et == EventType.SaveTrigger)
.Scan(0, (editCount, eventType) => eventType == EventType.SaveTrigger ? 0 : editCount + 1)
.DistinctUntilChanged()
.Where(count => count == 0)
.Select(_ => Unit.Default);
并使用枚举类
enum EventType
{
SaveTrigger,
Edit
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.