Главная » C# » Обработка незавершенных задач с помощью finally в Visual C# (Sharp)

0

Проблему излишней раскрутки стека проще всего решить с помощью  ключевого слова finally, которое гарантирует выполнение определенного фрагмента кода, независимо от того, было ли выброшено исключение. В следующем фрагменте пазан код из рис. 5.6, модифицированный с применением ключевого слова finally. Этот код присваивает члену данных depth правильное значение,

class CallingExample { int depth;

public void CalledCalledMethodO { depth = 2;

throw new Exception О;

public void CalledMethodO { depth = 1;

try {

CalledCalledMethod();

}

finally { depth =1 ;

}

}

public void Method() { depth = 0;

try {

CalledMethod();

}

finally { depth =0 ;

}

public int GetDepthO { return depth;

}

}

class Tests {

void TestCallingExample() { CallingExample els = null; try {

els = new CallingExample(); els.Method();

}

catch (Exception) { ;}

Console.WriteLine("Depth is (" + els.GetDepth() + ")");

public void RunAll() { TestCallingExample();

}

}

В данном примере каждое ключевое слово finally связано с блоком try. При иользовании ключевого слова finally ассоциировать блок catch с блоком try нет необходимости. Если выполнение программы переходит в блок try, по выходу из блока, независимо от того, было ли его исполнение успешным или произошло илючение, выполняется код в блоке finally. Таким образом, если происходит рарутка стека, то прежде чем исключение обрабатывается в каком-либо другом месте,

6  Зак   555

можно либо выполнить сброс состояния, либо присвоить ему непротиворечивое значение.

ПРИМЕЧАНИЕ

При вызове  блока  finally мы  не  знаем,  вызывается  ли  он  вследствие  исключения или после успешного  исполнения   кода.  Поэтому  нельзя  предполагать,   что  блок finally вызывается   единственно  вследствие  исключения.

Источник: Гросс  К. С# 2008:  Пер. с англ. — СПб.:  БХВ-Петербург, 2009. — 576 е.:  ил. — (Самоучитель)

По теме:

  • Комментарии