缓冲区后重置区别

时间:2016-12-03 17:15:32

标签: c# system.reactive

所以我有这样的字符串流:

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运算符完成。

1 个答案:

答案 0 :(得分:2)

你最终的解决方案应该可以正常工作。如果您希望使用string path = Path.Combine(Environment.CurrentDirectory, @"Data\", fileName); XmlTextReader reader = new XmlTextReader(path); CreateTree(reader, tree, null); reader.Close(); 留在Rx土地,则应切换到Window运营商:

IObservable