C# 在rx.net中使用.buffer的成对运算符
插入驱动程序后,我需要自动备份外部驱动程序(如usb密钥)中的文件。 要知道何时插入新的usb或硬盘驱动器,我使用了observable,问题是我知道连接驱动程序的唯一方法是使用以下功能: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
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();比我想象的要简单得多,但我仍然好奇如何实现成对运算符