ネットワークドライブからフォルダを削除するWindowsサービスを実行しています。私は非同期の削除をしたい。これはどうすればできますか?非同期にフォルダを削除する方法
今私は、ディレクトリをループして、私は、タスク並列ライブラリ使用することになり
Directory.Delete(fullPath, true);
おかげ
ネットワークドライブからフォルダを削除するWindowsサービスを実行しています。私は非同期の削除をしたい。これはどうすればできますか?非同期にフォルダを削除する方法
今私は、ディレクトリをループして、私は、タスク並列ライブラリ使用することになり
Directory.Delete(fullPath, true);
おかげ
を呼び出しています:あなたがループしている場合は、あなたが使用することができ
Task.Factory.StartNew(path => Directory.Delete((string)path, true), fullPath);
+1;私にそれを打つ。ローカルで閉じるのではなく、パラメータを渡すという軽量なアプローチを使用していることを賞賛します。 –
@vcsjones:これはメソッドを非同期的に呼び出すようなものになりますが、後でioスレッドによって選択されますか? – stackoverflowuser
@stackoverflowuserこれは、タスクで 'Directory.Delete'を呼び出します。これはおそらくスレッドプールからのスレッドになります。これにより、削除が別のスレッドで発生している間もコードを続行できます。 – vcsjones
をパラレル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));
なぜそれがサービスの要件になるのか、彼らはすでにスレッドを使用しているのが分かりません。あなたは別のものを使うことができます。 –
Windowsサービスが非同期に処理する必要があるのはなぜですか?それはとにかくバックグラウンドで実行されます。非同期操作は、通常、長期間の操作中にUIをフリーズさせるのではなく、応答し続けるために使用されます。 –
@ OlivierJacot-Descombes:Windowsサービスは、開始/停止要求に応答する必要があります。 –