Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在rx.net中使用.buffer的成对运算符_C#_System.reactive_Reactive Programming_Reactive_Rx.net - Fatal编程技术网

C# 在rx.net中使用.buffer的成对运算符

C# 在rx.net中使用.buffer的成对运算符,c#,system.reactive,reactive-programming,reactive,rx.net,C#,System.reactive,Reactive Programming,Reactive,Rx.net,插入驱动程序后,我需要自动备份外部驱动程序(如usb密钥)中的文件。 要知道何时插入新的usb或硬盘驱动器,我使用了observable,问题是我知道连接驱动程序的唯一方法是使用以下功能: DriveInfo.GetDrives(); 返回包含每个链接驱动程序的列表: 我执行此功能是为了知道何时连接了新的大容量内存: public static IObservable<DriveInfo> ObserveNewDrivers() => Obser

插入驱动程序后,我需要自动备份外部驱动程序(如usb密钥)中的文件。 要知道何时插入新的usb或硬盘驱动器,我使用了observable,问题是我知道连接驱动程序的唯一方法是使用以下功能:

DriveInfo.GetDrives();
返回包含每个链接驱动程序的列表: 我执行此功能是为了知道何时连接了新的大容量内存:

       public static IObservable<DriveInfo> ObserveNewDrivers() =>
        Observable.Interval(TimeSpan.FromSeconds(5))
            .Select(_ => DriveInfo
                .GetDrives())
            .DistinctUntilChanged()
            .Buffer(2)
            .SelectMany(buff => buff.Aggregate(
                (a, b) => b.Except(a).ToArray()));
public static IObservable ObserveNewDrivers()=>
可观测间隔(时间跨度从秒(5))
.选择(=>DriveInfo
.GetDrives())
.DistinctUntilChanged()
.缓冲区(2)
.SelectMany(buff=>buff.Aggregate(
(a,b)=>b.除了(a.ToArray());
它不起作用,因为我只比较两对两个驱动程序(使用“Except”函数) 数值例子:1,2;3.4; 5.6;. 这样,如果我重新插入相同的驱动程序,我将加倍备份它两次,因为我不会比较第三个驱动程序和第一个驱动程序(例如)

我认为我需要的行为是rxjs中的成对运算符,而不是.net ie中的成对运算符: 1.2; 2.3; 3.4; 4.5; 5.6; 等

另外,如果我不太清楚,并且我的英语很差,请原谅:^)


感谢您的回答.NET中的缓冲区有一个带2个参数的构造函数,它允许您执行“重叠”缓冲区

如果我对您面临的问题的理解是正确的,您可能希望使用:

.Buffer(2, 1)
这意味着每1个新值将发出两个值。更多信息请点击此处:


请参阅“按计数重叠缓冲区”一节。

当我试图将其与代码进行比较时,您的描述没有意义。你能描述一下你正试图根据你的业务需求做什么吗?我需要的是一个可观察的,当新的驱动程序插入计算机时会通知我。你可能想在.distinctunitle更改后使用扫描,这样你就可以保留以前的DriveInfo.GetDrives结果,然后与最新的结果进行比较,看看有什么新的,我找到了另一种方法:Observable.Interval(TimeSpan.FromSeconds(5)).SelectMany(=>DriveInfo.GetDrives()).Distinct();比我想象的要简单得多,但我仍然好奇如何实现成对运算符