- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 Rx 来监视对文件的更改。
| window1 | | window2 | | window3 |
Time 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
Input M M M M M R
Output M M R
Input M M M M M M R
Output M M M R
(M - 修改,R - 重命名)
顶级示例:最后一个窗口 (11 - 14) 中没有剩余修改。
底部示例:最后一个窗口中的剩余修改(在 t = 12)。
在上面的示例中,我每 5 秒采样一次以限制对文件的修改操作。即在每 5 秒的窗口中,我只进行最新的修改操作。
我希望在重命名操作发生时立即停止采样,并且返回当前窗口中的最新修改(如果有)和重命名事件。
一些注意事项:
这是我目前所拥有的。
var events = source
.GroupBy(e => e.FullPath)
.SelectMany(g => g.Sample(TimeSpan.FromSeconds(5)));
最佳答案
这是一个解决方案 - 有点仓促,所以我确信它可以整理,但它似乎有效。这使用 Nuget 包 rx-testing
和 ix-main
[原文如此 - IEnumerable<T>.TakeLast()
需要].我已经将您的示例映射为所展示的,但将一个时间单位表示为 100 个刻度。
请注意,您问题中的第二个场景有一个错误 - 在收到重命名事件之前不可能发出最后修改的事件。因此,我的输出在 1400 ticks 时发出了两个事件。
主要查询如下(假设actions
包含FileAction
事件):
发布操作以便我们可以多次订阅:
actions.Publish(source => {
以 500 个滴答间隔对操作进行窗口化,但在重命名时将窗口关闭:
return source.Window(
() => Observable.Timer(TimeSpan.FromTicks(500), scheduler)
.Merge(source.Where(x => x == FileAction.Rename)
.Select(_ => 0L)))
在重命名时也停止窗口流:
.TakeUntil(source.Where(x => x == FileAction.Rename))
将窗口展平成包含最多两个事件的列表流:
.SelectMany(x => x.TakeLastBuffer(2))
寻找重命名作为最后一项,如果是重命名则抓取最后 2 项,否则只是最后一项。请注意,这是精心设计的,用于处理空列表或 1 项列表。另外,使用 SelectMany
再次将列表展平,以便我们留下一系列操作。
.SelectMany(l => {
return l.LastOrDefault() == FileAction.Rename
? l.TakeLast(2)
: l.TakeLast(1);
});
})
您可以订阅它以获取请求的事件。这是一个完整的示例:
void Main()
{
var tests = new Tests();
tests.Scenario();
}
// Note inheritance of ReactiveTest to get OnXXX helpers
public class Tests : ReactiveTest
{
public enum FileAction
{
Modify,
Rename
}
public void Scenario()
{
var scheduler = new TestScheduler();
var actions = scheduler.CreateHotObservable<FileAction>(
OnNext(200, FileAction.Modify),
OnNext(300, FileAction.Modify),
OnNext(500, FileAction.Modify),
OnNext(700, FileAction.Modify),
OnNext(900, FileAction.Modify),
// Uncomment next line for
// scenario with mod + rename in last window
// OnNext(1200, FileAction.Modify),
OnNext(1400, FileAction.Rename));
actions.Publish(source => {
return source.Window(
() => Observable.Timer(TimeSpan.FromTicks(500), scheduler)
.Merge(source.Where(x => x == FileAction.Rename)
.Select(_ => 0L)))
.TakeUntil(source.Where(x => x == FileAction.Rename))
.SelectMany(x => x.TakeLastBuffer(2))
.SelectMany(l => {
return l.LastOrDefault() == FileAction.Rename
? l.TakeLast(2)
: l.TakeLast(1);
});
})
.Timestamp(scheduler) /* to show timings */
.Subscribe(x => Console.WriteLine(
"Event: {0} Timestamp: {1}",
x.Value, x.Timestamp.Ticks));
scheduler.Start();
}
}
这个输出:
Event: Modify Timestamp: 500
Event: Modify Timestamp: 1000
Event: Rename Timestamp: 1400
如果您取消注释第二种情况的标记行,您将获得:
Event: Modify Timestamp: 500
Event: Modify Timestamp: 1000
Event: Modify Timestamp: 1400
Event: Rename Timestamp: 1400
关于c# - 如何使用 Rx 监控文件的变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26554029/
我已经在 ubuntu 14.0 上成功安装了 Zabbix 3.2 服务器主机上的 Z 是绿色的。不幸的是,JMX 是红色的。 Zabbix 服务器:192.168.1.112 带有 tomcat
我想制作一个仪表板,显示我们的 Azure 服务总线队列的状态,并显示“添加到队列的消息”、“队列长度”和“已处理的消息”等的历史记录。使用 Azure 管理门户,我可以看到,这些统计信息大部分是手动
我的 MYSQL 每天晚上都有事件,但我不太确定发生了什么,因为即使我将其设置得早于其他事件,它仍然在早上运行。 问题是,我如何检查运行事件的历史记录或日志,哪一个晚上锁了,哪一个是跑了没跑? 谢谢
1、监控log文件大小超过10g的server 和db 复制代码代码如下: create procedure db_sendmail_mssqllogsize as&n
本教程讨论如何使用 AspectJ 开源框架监控 Spring 应用程序在方法执行方面的性能。 传统上,监控每个 Java 方法所花费的时间的最简单方法是在方法的开头和结尾包含一些跟踪行: publi
有什么可以帮助 msmq 监控的吗?当消息出现在队列中并且在休假时相同时,我想获得一些事件/监视器。 最佳答案 查看 Windows 管理性能计数器。 如果您查看管理工具并找到“性能计数器”,您将能够
我的 Tomcat 中的一个巨大的 web 应用程序有时会开始使用过多的 DBCP 连接,从而导致问题。 为了进行调查,我想在每个时间点准确地知道什么线程/方法持有池的连接。不需要是实时的,事后分析就
在浏览器的整个页面生命周期中监视 cookie 并在 cookie 更改时触发事件的最佳 JS 或 JQuery 特定方法是什么? 最佳答案 据我所知,不可能将 change (或类似)事件直接绑定(
我想尽可能详细地报告我的笔记本的执行情况。简而言之,我想实时查看我的笔记本正在执行的每个操作。例如,我的一个函数有一个 sleep 周期为 5 秒的循环,我希望看到程序实际上正在 sleep 并且循环
Azure 容器服务是否与 Azure Monitor 集成?想知道对 kubernetes 集群进行日志记录/监控的最佳方法是什么? 最佳答案 如果您正在 Azure 上寻找监视工具,您可能需要使用
我一直在尝试使用 erlang:monitor/2 来监视 gen_server。不幸的是,每次我尝试这个时,Erlang shell 都会进入无限循环。 这是我为测试这一点而编写的测试程序。 -mo
Azure 容器服务是否与 Azure Monitor 集成?想知道对 kubernetes 集群进行日志记录/监控的最佳方法是什么? 最佳答案 如果您正在 Azure 上寻找监视工具,您可能需要使用
我想使用 编写一个 shell 脚本来监控集群中的消费者滞后 bin/kafka-run-class.sh kafka.tools.ConsumerOffsetChecker --zkconnect
在 .NET 中,假设 thread A 锁定了一个对象。同时,线程B和线程C被阻塞,等待线程A解锁对象。 现在,线程 A 解锁了对象。接下来将选择哪个线程(B 或 C)?它是如何确定的? 最佳答案
我搜索过这个主题,但发现很少有有用的细节。有了这些细节,我尝试编写一些代码如下。 注意:在将此帖子标记为重复之前,请将此帖子中共享的详细信息与其他帖子进行比较,而不仅仅是按主题。 - (NSArray
目录 1、指标监控 2、常用的监控端点 3、定制EndPoint 4、spring boot admin(可以使用)
我们使用 Prometheus 和 Grafana 来监控我们的 Kafka 集群。 在我们的应用程序中,我们使用 Kafka 流,Kafka 流有可能因异常而停止。我们正在记录事件 setUnCau
我正在建立一个复杂的网络仿真,并试图捕捉一些重要的性能测量。 我在服务器上运行了 mininet,并且我将视频从一个 mininet 主机流式传输到另一个(使用 -nodisp 选项,因为我没有 GU
Jenkins 的 openstack-plugin 使用 openstack4j 与 openstack 云对话。我正在寻找一种方法,我们可以从客户端的角度监控 openstack4j 所做的 ht
我正在处理一项需要监控 Thunderbolt 端口连接变化的要求。 (当连接或断开 Thunderbolt 电缆时)。 我尝试使用 IOServiceMatching(kIOUSBInterface
我是一名优秀的程序员,十分优秀!