gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:42:44 29 4
gpt4 key购买 nike

当插入驱动程序时,我需要从外部驱动程序(例如 USB key )自动备份我的文件。知道何时插入新的 usb 或硬盘驱动器我使用了一个可观察的,问题是我知道连接驱动程序的唯一方法是使用函数:

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

它不起作用,因为我只比较了一对二对二的驱动程序(使用“Except”函数)数值示例:1,2; 3.4; 5.6;。这样,如果我重新插入相同的驱动程序,我将对其进行双重备份两次,因为我不会将第 3 个驱动程序与第一个驱动程序进行比较(例如)。

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

附言。对不起,如果我不太清楚并且我的英语不好 :^)

感谢您的回答

最佳答案

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

如果我对你面临的问题的理解是正确的,你会想使用:

.Buffer(2, 1)

这意味着每 1 个新值将发出两个值。更多信息在这里:

http://www.introtorx.com/Content/v1.0.10621.0/13_TimeShiftedSequences.html#Buffer

请参阅“按计数重叠缓冲区”部分。

关于c# - 在 rx.net 中使用 .buffer 的成对运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46133247/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com