Использование блока в Asp.net - PullRequest
1 голос
/ 11 апреля 2011

У меня есть сомнения с использованием () {}.Я знаю, что он использует интерфейс Idisposable.Поэтому, если я напишу в linq сущности:

Using(objectconext context=new objectcontext())
{
   throw new Exception();
}

, будет ли объектный текст по-прежнему удален и существующее соединение будет закрыто или оно останется там живымСпасибо, Гаурав

Ответы [ 6 ]

2 голосов
/ 11 апреля 2011

Соединение не обязательно будет закрыто, так как это осуществляется в другом месте.

1 голос
/ 11 апреля 2011

Поскольку вы используете USING ключевое слово , оно будет удалено , даже если есть исключение .

Это обсуждается в этой теме : C # «Использование» синтаксиса

1 голос
/ 11 апреля 2011

С try-finally на MSDN :

Блок finally полезен для очистки любых ресурсов, выделенных в блоке try, а также для запуска любого кода, который должен выполняться дажеесли есть исключение.Управление всегда передается блоку finally независимо от того, как выходит блок try.

Поскольку «использование» является синтаксическим сахаром для блока try {} finally { /*calling IDisposable.Dispose() */ }, использование должно гарантировать, что ваш объект правильно расположен даже висключительная ситуация.

1 голос
/ 11 апреля 2011

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

From http://msdn.microsoft.com/en-us/library/yh598w02.aspx:

Оператор using обеспечивает вызов метода Dispose, даже еслиВозникает исключительная ситуация при вызове методов для объекта.

Что происходит дальше, это другое дело.Как указывает spender в своем ответе, DataContext не обязан закрывать используемое соединение и не должен беспокоиться об этом (поскольку DataContext должен правильно управлять соединением длявы).

При определенных условиях ваше выброшенное исключение может быть тихо проглочено блоком try finally.Смотрите здесь: http://www.digitallycreated.net/Blog/51/c%23-using-blocks-can-swallow-exceptions. Это не должно повлиять на вас.

0 голосов
/ 11 апреля 2011
0 голосов
/ 11 апреля 2011

Да, он будет утилизирован. Использование аналогично Try-Catch-Final и удалению объектов в блоке finally.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...