2012-10-02 156 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事件。