Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Пустой try с кодом в finally


Автор: Mephisto 26.7.2010, 15:04
Люди, для чего иногда пишут такой код  smile 
Код

        try
        {
        }
        finally
        {
            Thread.BeginThreadAffinity();
            flag = true;
        }

Чем отличается код исполняемый таким образом от обычного, ведь смысла логического нет? Должно быть разница в реализации есть.

Автор: nmn 26.7.2010, 19:42
разница в il коде будет

1:
Код

int a=0;
            try
            {
            }
            finally { Console.WriteLine(a); }


Код

 L_0000: ldc.i4.0 
    L_0001: stloc.0 
    L_0002: leave.s L_000b
    L_0004: ldloc.0 
    L_0005: call void [mscorlib]System.Console::WriteLine(int32)
    L_000a: endfinally 


2:
Код

int a=0;
{ Console.WriteLine(a); }


Код

L_0000: nop 
    L_0001: ldc.i4.0 
    L_0002: stloc.0 
    L_0003: ldloc.0 
    L_0004: call void [mscorlib]System.Console::WriteLine(int32)


Автор: Mephisto 27.7.2010, 00:26
Да, в иле я тоже видел разницу. Из него и восстанавливал исходный код по сути.

nmn, а о смысле использования столь геморного кода есть мысли?
Я смотрю создатели дотнета так иногда с потоками работают.

Автор: nmn 27.7.2010, 00:35
вот нашел
http://blog.somecreativity.com/2008/04/10/the-empty-try-block-mystery/
The MSDN page of Thread.Abort says that “Unexecuted finally blocks are executed before the thread is aborted”. So in order to guarantee that your processing finishes even if your thread is aborted in the middle by someone calling Abort on your thread, you can place all your code in the finally block (the alternative is to write code in the “catch” block to determine where you were before “try” was interrupted by Abort and proceed from there if you want to).

Автор: Mephisto 27.7.2010, 10:55
nmn, да, это оно. Теперь вроде понятно.
уууууу, грибыыы  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)