Сама служба устроена так, что в ней работают несколько Thread'ов. Необработанные исключения вызывают ее падения Пробовал: `Application.ThreadException += Application_ThreadException;' не брало (м.б., потому что в другом потоке ошибки падали) Это: 'AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;' помогло больше, по крайней мере смог запихать ошибку в лог. Но служба остановилась.
Как сделать, чтобы ее работа не прерывалась, а ошибка обработалась и записалась в лог?
Мне слабо представляется служба, которая при необработанных исключениях продолжает свою работу.
Например, есть служба, которая что-то получает от пользователя и пишет это в базу.
Представим, что запись в базу- это необрабатываемое исключение(Например, пустой блок catch
, что бы приложение не упало).
Получается, что служба продолжает работу и в этом случае у пользователя создается впечатление, что все хорошо, а на самом деле его данные не пишут в БД.
Вывод: Предусмотрите все исключения и их обработку, в противном случае будет создаваться видимость корректной работы, а по факту будет непредсказуемое поведение. Если вы действительно не ожидаете такого поведения, то пусть служба падает с записью в лог. Анализируя лог, вы получите место возникновения ошибки, где сможете предусмотреть новое место обработки исключения, если это возможно.
Смысл держать службу активной, если произошло необрабатываемое исключение? Ведь выполнение службы может пойти по непредсказуемым путям, вплоть до бесконечных циклов...
Если служба многофункциональная, то можно где-нибудь хранить данные об активных функциях.
Если в потоке, который реализует функцию произошло необрабатываемое исключение(, которое убило поток, то делаем эту функцию недоступной.
При вызове конкретной функции, ищем ее в коллекции функций и проверяем, что ее можно использовать.
Получается, что служба работает корректно, но часть функционала не работает.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Даны булевы вектора a и b длины nЕсли возможно, упорядочить их, или вывести сообщение "Вектора несравнимы" P