Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Почему в using не вызывается Dispose 
:(
    Опции темы
Stas123
Дата 16.12.2013, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 18.11.2009

Репутация: нет
Всего: нет



Как вы думаете, почему при исключении в секции using не вызывается Dispose?

освобождаемый класс
Код

internal sealed class ExceptionInConstructor : IDisposable
    {
        public void Use()
        {
            Console.WriteLine("Ok");
            System.Diagnostics.Debug.WriteLine("Ok");
            throw new Exception();
        }

        public void Dispose()
        {
            Console.WriteLine("Dispose");
            System.Diagnostics.Debug.WriteLine("Dispose");
            using (var file = new StreamWriter("er.txt"))
            {
                file.WriteLine("Disp");
            }
            Console.WriteLine("Dispose");
            System.Diagnostics.Debug.WriteLine("Dispose");
        }
    }


Использование
Код

private static void TestUsing()
        {
            using (var ec = new ExceptionInConstructor())
            {
                ec.Use();
            }
        }

PM MAIL   Вверх
jonie
Дата 16.12.2013, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



Почему это не вызывается? Разве что у вас неотлавливается исключение и приложение завершает работу самоубийством, но даже в этом случае Dispose будет вызван (правда уже после фатал эррор).

UPD: finally блок (а стало быть и Dispose) может быть не вызван в случае необрабатываемого exception-а, подробнее смотри ниже в обсуждении.

Это сообщение отредактировал(а) jonie - 18.12.2013, 13:48


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Stas123
Дата 18.12.2013, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 18.11.2009

Репутация: нет
Всего: нет



Да, исключение не отлавливается и программа падает, но я не вижу, чтобы Диспоуз сработал. Т.е. файл не создается. Почему? У меня консольное приложение, по идее все идет в одном потоке. Или я не прав?
PM MAIL   Вверх
jonie
Дата 18.12.2013, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



Все это описано же в описании языка:
Цитата

Within a handled exception, the associated finally block is guaranteed to be run. However, if the exception is unhandled, execution of the finally block is dependent on how the exception unwind operation is triggered. That, in turn, is dependent on how your computer is set up. For more information, see Unhandled Exception Processing in the CLR.
 (с) http://msdn.microsoft.com/en-us/library/zwc8s4fz.aspx

А вот тут подробности: http://msdn.microsoft.com/ru-ru/magazine/cc793966.aspx


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Stas123
Дата 19.12.2013, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 18.11.2009

Репутация: нет
Всего: нет



Ясно, спасибо.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0667 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.