У меня возникла ситуация на производственной машине, где поток в моей службе Windows просто умирает, не бросая исключение. На сегодняшний день мой журнал не был достаточно подробным, чтобы точно определить строку кода, где он умирает; Для этой цели я развернул новую версию с более подробным протоколированием. Но пока я не получу курящее оружие, мое подозрение попадает на строку кода, где я создаю новый контекст БД.Возможно ли, что нить просто умрет без исключения?
Ошибка не предсказуема, за исключением того, что она имеет тенденцию возникать в периоды высокой активности и часто коррелирует с другими потоками, бросающими исключения таймаута БД (следовательно, мое подозрение выше). Исключения, с которыми я могу справиться. Мертвых нитей я не могу.
Любые идеи, почему нить может умереть молча или иначе просто замораживать? Или что с этим делать?
EDIT: Чтобы быть ясным, код окружен блоком try-catch, а catch выполняет некоторые протоколирования (используя log4net). Так происходит и «наконец». Я знаю, что он работает, потому что другие потоки оставили журналы, когда они бросали исключения. Все, что я вижу в своем журнале, это то, что нить x попадает в определенную точку отладки, после чего ее никогда не видели и не слышали, и работа, которую она должна была выполнять, еще не выполнена.
Что значит «умереть»? Вы уверены, что закончили выполнение? Очень может быть тупик. – Leandro
какой тайм-аут установлен для указанного контекста БД ..? вы можете показать фрагмент фактического кода ..? возможно, вы справитесь с обработкой исключительных ситуаций, которые могут быть свернуты немного дальше .. трудно реально определить, не видя никакого существующего кода – MethodMan
Поскольку потоки не могут просто * исчезать *, но должны быть фактически завершены операционной системой, я не думаю что это можно сделать без исключения. – poke