StandardWatchEventKinds.ENTRY_MODIFY 重复触发原因及解决方案

        今天在测试监听文件修改自动更新缓存数据这一功能时偶然发现 StandardWatchEventKinds.ENTRY_MODIFY 竟然会多次触发。刚开始还以为是重载代码中涉及到文件的二次保存,后来 Debug 了一波发现不是,又想了想,要真是套娃不久直接 OOM 了嘛,那就只有一种可能,是编辑器保存修改这个操作本身就涉及到两次对文件内容的更新,查看官方 doc,注释如下:

        这里面有句话很耐人寻味

        The event count for this event is 1 or greater.

        很明显,官方已经预料到这个事件会被重复触发,结合先前分析的编辑器修改前提,通过检索我们可以得知:

        通过编辑器编辑文件的内容时,它将同时修改日期(或其他元数据)和内容。因此监听ENTRY_MODIFY时,您将获得两个事件。

         不难猜测,如果改用 IO 对文件内容进行修改,ENTRY_MODIFY 仅触发一次。进行验证发现推测正确(具体代码不再贴出)。

        最后,对原有监听代码进行去噪处理,其实只需要维护一个标记变量不断取反即可:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值