Я думаю, что Directory.Delete (String, Boolean) возвращается до завершения удаления.
Я использовал приведенный ниже код для обновления каталогов, и Sleep (100) определенно срабатывает в некоторых случаях,но редко при первом вызове (что соответствует вашему описанию «специально (sic) в повторяющейся операции»).
String destination = Path.Combine(targetFolder, Name);
if (Directory.Exists(destination))
{
Directory.Delete(destination, true);
Int32 i = 0;
while(Directory.Exists(destination))
{
System.Threading.Thread.Sleep(100);
if (i++ > 50) { throw new Exception("Failed to remove " + destination); }
}
}
Directory.CreateDirectory(destination);