Это программирование вуду. Обычно это вдохновляет программист на то, что File.Delete() не всегда удаляет файл. Довольно неизбежный побочный эффект запуска программ в многозадачной операционной системе, который также позволяет другим процессам открывать файлы.
И есть категория упакованных в термоусадочную оболочку вредоносных программ, которые программисты добровольно устанавливают на своих машинах, что может вызвать задержку. В верхней части списка находится анти-вредоносная программа, следуют поисковые индексы и утилиты облачного хранилища.
Они используют параметр FileSharing.Delete, чтобы открыть файл, чтобы попытаться свести к минимуму их влияние. Как правило, работает нормально, пока вы не делаете такие вещи, как попытка переписать файл сразу после его удаления. Это не работает, файл находится в режиме «Ожидание удаления», и вы получаете пощечину с UnauthorizedAccessException.
Затем программа-жертва имеет тенденцию замечать, что «ожидание бит» помогает избежать исключения. Предоставление другому процессу достаточно времени, чтобы закончить все, что он делает с файлом, и закрыть дескриптор файла. Как только последний дескриптор закрыт, файл фактически исчезает из файловой системы, и воссоздание его не прерывается.
Сон на 20 миллисекундов вполне произволен и довольно маловероятен. Вы никогда не узнаете, как долго ждать, а не многократно пытаться. Задача real состоит в том, что эта стратегия является очень неудачным способом воссоздания файлов. Сначала удаление, поэтому создание и запись файла очень опасно. Как отмечено, удаление работает отлично, но создание его опасно. Когда это пойдет не так, пользователь останется без копии файла. Полная потеря данных. Никогда не очень желательная особенность программы :)
Не использовать вуду. Правильный способ сделать это - создать новый файл, а затем использовать File.Replace(), чтобы поменять его на старый файл, а затем удалить старый файл. Никогда не теряйте данные, вредоносное ПО может немного побороть это. Удаление файла путем перемещения его в корзину также является прекрасным подходом, если это происходит не так часто, FileSystem.DeleteFile() в любимом пространстве имен пользователей.
Не уверен. При создании кода он, вероятно, потреблял много ресурсов, поэтому они добавили сон. Я лично НЕ использовал бы его. – kevintjuh93
Это не обязательно, но я бы не удалял их, если бы вы были вами, если сумма всех этих задержек 20 мс не отрицательно скажется на программе. Они были поставлены туда с целью, возможно, из-за плохого оборудования, проблем с сетью и т. Д. –