2012-10-02 130 views
1

如果在受监视的文件夹中同时创建了x个新文件,则Created事件会同时触发x次或x次触发x次?System.IO.FileSystemWatcher的Created事件是同步还是异步触发的?

+0

其中之一,你将如何在同一时刻同时创建x个新文件?会有滞后。然后我们来看看这个事件是否从许多线程中被触发,每个线程在不同的内核上运行,所有线程都在同一时间同步并完全触发......似乎不太可能。我看不到任何事情会“同时发生”,但也许我误解了这个问题。 – spender

+0

你是对的。它不会在同一时间发生。但是,如果您创建10个空文本文档并将它们移动到被监控的文件夹中,那么它们几乎是同时创建的......至少从人类的角度来看。无论如何,担心我的部分是事件处理程序过程中的代码,它可以花费尽可能多的时间处理每个文件。我不希望所有这些处理都在同一时间发生。 –

+0

听起来像你需要一个队列。 – spender

回答

3

filesystemwatcher类使用内部缓冲区来存储文件更改(这可能会溢出,这会导致事件丢失),这将依次调用订阅类型的事件,直到缓冲区为空。这是默认运行的。只要同步对象属性被描述为in the documentation,就会使用默认值。您可以将此行为同步通过如在this answer.

还要注意所描述的,从文档,只有一个文件观察者将接收文件的变化,即使超过一个,看同样的文件夹中的事件设置一个SynchronizingObject的。

总结:默认情况下,这些事件存储在一个缓冲区中,然后由一个单独的线程快速连续触发,直到缓冲区为空。如果创建或更改很多文件太快,由于缓冲区溢出可能会丢失一些更改。

0

它同时发生x次。对于多个文件,您可以同时运行Created事件。