Достигает ли что-нибудь повторное выполнение неудачных операций ввода-вывода?

Обычная ситуация, с которой я сталкивался в моем офисе, это то, что если мы не выполняем операцию ввода-вывода, мы немного подождем и попробуем еще раз пару раз, надеясь, что она вдруг начнет работать.

Пример того, о чем я говорю:

bool WriteAFile()
{
uint32_t writeAttempts = 0;
do
{
if (WriteFile(/*...*/))
{
break;
}
Sleep(50);
writeAttempts++;
} while (writeAttempts < 3);
return writeAttempts < 3;
}

Я предполагаю, что это поведение изначально появилось, чтобы предотвратить сбои при работе с файлами, которые временно заблокированы другим процессом … что имеет некоторый смысл … однако я не вижу, как это применимо к другим операциям.

Повышает ли повторение операций ввода-вывода таким образом ваши шансы на запись «хороших» данных на диск? Можно ли это использовать в качестве обходного пути для умирающих дисков? Существуют ли другие законные способы использования такого поведения?

PS: хотя я пометил это как пример C ++ для Windows, мне интересно узнать, есть ли веские причины сделать это и с другими языками / платформами!

2

Решение

по-прежнему…

Случайно, есть несколько причин, почему это может быть допустимо / желательно:

  • вы пишете на съемный диск, который может быть не готов
  • вы пишете на сетевой диск, который может исчезнуть и появиться через несколько миллисекунд (временная ошибка сети)
  • что-то совершенно другое …

Одно можно сказать почти наверняка: такой механизм повтора не был запрограммирован случайно или случайно!

Я предлагаю выследить оригинального автора и спросить его / ее, почему он / она это сделал … может быть очень веская причина, или первоначальная причина может быть давно устарела.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]