2012-01-20 7 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)); 
 
関連する問題