от
Я никогда не был полностью доволен тем, как обработка исключений работает, есть много исключений и попробовать/поймать приносит на стол (раскручивание стека, и т. д.), но это, кажется, сломать много модель ОО в процессе. В любом случае, вот в чем проблема: Допустим, у вас есть некоторый класс, который обертывает или включает сетевые файловые операции ввода-вывода (например, чтение и запись в файл в какой-то конкретный где UNC-путь). По различным причинам вы не хотите, чтобы эти операции ввода-вывода на провал, так что если вы обнаружите, что они не повторить их, а вы продолжайте попытки, пока они не преуспевают или не будет достигнут тайм-аут. У меня уже есть удобный класс RetryTimer, который я могу создать и использовать для сна текущего потока между попытками и определить, когда время ожидания истекло и т. д. Проблема в том, что у вас есть куча операций ввода-вывода в несколько методов этого класса, и вам нужно, чтобы обернуть каждый из них в попробовать-поймать логику повтора. Вот пример фрагмента кода:
RetryTimer fileIORetryTimer = new RetryTimer(TimeSpan.FromHours(10));
bool success = false;
while (!success)
{
    try
    {
        // do some file IO which may succeed or fail
        success = true;
    }
    catch (IOException e)
    {
        if (fileIORetryTimer.HasExceededRetryTimeout)
        {
            throw e;
        }
        fileIORetryTimer.SleepUntilNextRetry();
    }
}
Итак, как Вы избежать дублирования код для каждой операции файлового ввода-вывода на протяжении всего занятия? Мое решение было использовать анонимный делегат блоков и один метод в классе, который исполнил делегат блок переданный ему. Это позволило мне сделать такие вещи в других методах:
this.RetryFileIO( delegate()
    {
        // some code block
    } );
Я несколько не такой, но он оставляет желать лучшего. Я бы хотела услышать, как другие люди решают такого рода проблемы.

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.
...