C# 在缓冲区后重置不同

C# 在缓冲区后重置不同,c#,system.reactive,C#,System.reactive,我有这样的字符串流: ABA ABCA +--------+-------+ 0 1 2 s 我希望得到不同的值,将它们缓冲一秒钟,然后重新执行。因此,我希望有两组数据,如上图所示: AB和ABC 我从这个开始: void Main() { var subject = new Subject<string>(); var subscription = subject .Distinct() .Buffer

我有这样的字符串流:

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();
}

但我想知道是否可以使用Rx运营商来实现

最后的解决方案应该可以正常工作。如果您想使用
IObservable
停留在Rx着陆区,您应该切换到操作员:

var subscription = subject
    .Window(TimeSpan.FromSeconds(1))
    .Select(o => o.Distinct())
    .Merge()
    .Subscribe(eg =>
        {
            eg.Dump();
        });

谢谢我已经在使用
GroupBy()
玩游戏了,但结果没有这个好。
var subscription = subject
    .Window(TimeSpan.FromSeconds(1))
    .Select(o => o.Distinct())
    .Merge()
    .Subscribe(eg =>
        {
            eg.Dump();
        });