У меня есть функция, которая выглядит следующим образом:
try
{
_dbManager.InsertSearch(some data);
}
catch (Exception ex)
{
//do logging
}
_dbManager
использует LINQ для вставки данных в базу данных SQL.Вчера на компьютере, на котором размещена база данных, не хватило места на жестком диске, и моя программа упала.Я получил аварийный дамп, который показывает, что SqlClient.SqlException
поднял с сообщением об исключении, читая что-то вроде "Журнал транзакций базы данных полон ...".
Мой вопрос: Почему исключение не было поймано в блоке catch выше?Странно то, что когда я пытался воспроизвести проблему, я мог получить то же исключение, но оно было перехвачено блоком catch.В чем может быть проблема?
Второй, связанный с этим вопрос: Представьте себе, если мы используем стороннюю библиотеку и не хотим, чтобы было выдано исключение.Мы можем использовать блок try-catch, но это работает только на вызывающем потоке.Что делать, если третья сторона запускает новый поток и там создается исключение?Есть ли способ справиться с этим?Я знаю, что могу зарегистрировать наш UnhandledExceptionHandler
, но это, похоже, отличается от того, что я хотел.