Исключение из блока finally - PullRequest
5 голосов
/ 25 марта 2010

Рассмотрим следующий код, в котором LockDevice () может произойти сбой, и сгенерировать исключение самостоятельно. Что происходит в C #, если исключение вызывается из блока finally?

UnlockDevice();

try
{
  DoSomethingWithDevice();
}
finally
{
  LockDevice(); // can fail with an exception
}

Ответы [ 2 ]

10 голосов
/ 25 марта 2010

Точно то же самое, что произошло бы, если бы он не был в блоке finally - исключение может распространяться с этой точки. Если вам нужно, вы можете попробовать / поймать изнутри наконец:

try
{
    DoSomethingWithDevice();
}
finally
{
    try
    {
        LockDevice();
    }
    catch (...)
    {
        ...
    }
}
0 голосов
/ 25 марта 2010

Метод называется Try / Catch

Где ваш улов?

UnlockDevice();

try
{
  DoSomethingWithDevice();
}
catch(Exception ex)
{
  // Do something with the error on DoSomethingWithDevice()
}
finally
{
   try
   {
      LockDevice(); // can fail with an exception
   }
   catch (Exception ex)
   {
       // Do something with the error on LockDevice()
   }
}
...