soumyaraj Ответов: 2

Будет ли return выполняться в операторе try независимо от того, будет ли он окончательно заблокирован?


Привет,
Для приведенного ниже сценария будет ли он возвращать R до того, как он перейдет к окончательному блоку?Или же до тех пор, пока он не дождется выполнения блока finally?
Здесь мое требование заключается в необходимости отправить ответ как можно скорее при доступе к моей функции
"Getresponse".Пожалуйста, помогите мне в этом.
public ResponseMsg Getresponse(parameters...)
{
   ResponseMsg R;
    <pre lang="C#">try
        {
           //Checking some condition
        R.Acknowledgement = "1";
           Return R;

        }
        catch (Exception)
        {
            Console.WriteLine("catch");
        }
        finally
        {
//           Some Db operations..
        }

}
С уважением,
Сумья

Что я уже пробовал:

public ResponseMsg Getresponse(parameters...)
{
   ResponseMsg R;
    <pre lang="C#">try
        {
           //Checking some condition
 R.Acknowledgement = "1";
           Return R;

        }
        catch (Exception)
        {
            Console.WriteLine("catch");
        }
        finally
        {
//           Some Db operations..
        }

}

2 Ответов

Рейтинг:
17

OriginalGriff

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

private void myButton_Click(object sender, EventArgs e)
    {
    Console.WriteLine("Before");
    Console.WriteLine(ShowMe());
    Console.WriteLine("After");
    }
private int ShowMe()
    {
    try
        {
        Console.WriteLine("Try");
        return ShowReturn();
        }
    finally
        {
        Console.WriteLine("Finally");
        }
    }
private int ShowReturn()
    {
    Console.WriteLine("ShowReturn");
    return 1;
    }

Вы получите:
Before
Try
ShowReturn
Finally
1
After
Что довольно хорошо показывает порядок.


Рейтинг:
1

0x01AA

Блок finally будет выполнен также для оператора(ов) return между кодами. Но с моей точки зрения "возврат" между кодами-это обычно плохая практика.

Подробности вы можете найти здесь:
попробовать...поймать...наконец заявление[^]