2012-01-20 48 views
5

我有一個Windows服務正在運行,從網絡驅動器中刪除文件夾。我想要使​​刪除異步。如何才能做到這一點?如何異步刪除文件夾

現在我通過目錄循環,並呼籲

Directory.Delete(fullPath, true); 

感謝

+0

很難看出爲什麼這是服務中的一項要求,他們已經使用線程。你可以使用另一個。 –

+0

Windows服務爲什麼要異步執行操作?無論如何它都在後臺運行。通常使用異步操作來保持UI響應,而不是在長時間運行操作期間凍結它。 –

+1

@ OlivierJacot-Descombes:Windows服務應該響應啓動/停止請求。 –

回答

9

我會使用任務並行庫:

Task.Factory.StartNew(path => Directory.Delete((string)path, true), fullPath); 
+3

+1;打敗了我。並讚揚使用輕量級方法傳遞參數,而不是關閉本地。 –

+0

@vcsjones:這是否會像異步調用方法,然後它會被io線程稍後挑選? – stackoverflowuser

+2

@stackoverflowuser這將在任務中調用'Directory.Delete';哪些(可能 - 可能)將是線程池中的一個線程。這將允許您的代碼在另一個線程上發生刪除時繼續。 – vcsjones

1

如果你是循環,您可以使用平行的foreach

 

// assuming that you have a list string paths. 
// also assuming that it does not matter what order in which you delete them 
Parallel.ForEach(theListOfDirectories, (x => Directory.Delete(x));