所以我有这样的字符串流:
ABA ABCA
+--------+-------+
0 1 2 s
我想获取不同的值,将它们缓冲一秒钟,然后再次执行此操作。所以我想要上图所示的两组数据:
AB 和 ABC
我从这个开始:
void Main()
{
var subject = new Subject<string>();
var subscription = subject
.Distinct()
.Buffer(TimeSpan.FromSeconds(1))
.Subscribe(eg =>
{
eg.Dump();
}
);
subject.OnNext("A");
subject.OnNext("B");
subject.OnNext("A");
Console.ReadLine();
subject.OnNext("A");
subject.OnNext("B");
subject.OnNext("C");
subject.OnNext("A");
Console.ReadLine();
subscription.Dispose();
}
但是在我在第一个 Console.ReadLine()
输入一行之前输出 AB,然后再输入 C。
我想要的是在每个缓冲期后重置 Distinct() 运算符。这可能吗?
我当然可以做到这一点并使其正常工作:
var subscription = subject
.Buffer(TimeSpan.FromSeconds(2))
.Select(s => s.Distinct())
.Subscribe(eg =>
{
eg.Dump();
});
但我想知道是否可以使用 Rx 运算符来完成。
最佳答案
您最后得到的解决方案应该可以正常工作。如果您想继续使用 IObservable 留在 Rx 领域,您应该切换到 Window
运算符:
var subscription = subject
.Window(TimeSpan.FromSeconds(1))
.Select(o => o.Distinct())
.Merge()
.Subscribe(eg =>
{
eg.Dump();
});
关于c# - 缓冲区后重置不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40950382/