From c5965f7dbd2111582d62c32448dc1ef0890cdef5 Mon Sep 17 00:00:00 2001 From: Cyberboss Date: Sun, 12 Nov 2017 01:37:28 -0500 Subject: [PATCH] Make directory deletion more async --- TGServerService/Program.cs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/TGServerService/Program.cs b/TGServerService/Program.cs index df51009843..e8e749689d 100644 --- a/TGServerService/Program.cs +++ b/TGServerService/Program.cs @@ -49,7 +49,7 @@ namespace TGServerService excludeRoot[I] = excludeRoot[I].ToLower(); if (CheckDeleteSymlinkDir(di)) return; - await NormalizeAndDelete(di, excludeRoot); + await NormalizeAndDelete(di, excludeRoot, false); if (!ContentsOnly) { if (excludeRoot != null && excludeRoot.Count > 0) @@ -79,10 +79,10 @@ namespace TGServerService /// /// of the directory to empty /// Lowercase file and directory names to skip while emptying this level. Not passed forward - static async Task NormalizeAndDelete(DirectoryInfo dir, IList excludeRoot) + static async Task NormalizeAndDelete(DirectoryInfo dir, IList excludeRoot, bool deleteRoot) { - var fileTask = Task.Factory.StartNew(() => - { + var tasks = new List { Task.Factory.StartNew(() => + { foreach (var file in dir.GetFiles()) { if (excludeRoot != null && excludeRoot.Contains(file.Name.ToLower())) @@ -90,17 +90,19 @@ namespace TGServerService file.Attributes = FileAttributes.Normal; file.Delete(); } - }); + }) }; + foreach (var subDir in dir.GetDirectories()) { if (excludeRoot != null && excludeRoot.Contains(subDir.Name.ToLower())) continue; if (CheckDeleteSymlinkDir(subDir)) continue; - await NormalizeAndDelete(subDir, null); - subDir.Delete(true); + tasks.Add(NormalizeAndDelete(subDir, null, true)); } - await fileTask; + await Task.WhenAll(tasks); + if(deleteRoot) + dir.Delete(true); } ///