Я разрабатываю большое приложение, которое состоит из множества плагинов / приложений меньшего размера.
Они недостаточно велики, чтобы быть полным процессом, но слишком малы, чтобы запускаться в потоке под одним процессом,наряду с этим я хочу, чтобы это основывалось на плагине.Если доступна более новая версия этого плагина, его следует выгрузить, обновить и запустить снова.
Во время поиска решения я могу найти магическое слово AppDomain и указать:
"Использование доменов приложений для изоляции задач, которые могут привести к сбою процесса. Если состояние домена приложения, выполняющего задачу, становится нестабильным, домен приложения можно выгрузить, не влияя на процесс. Это важно, когда процесс должен выполняться в течение длительного времени.без перезапуска. Вы также можете использовать домены приложений для изоляции задач, которые не должны обмениваться данными. "
Таким образом, это именно то, что я хочу.Тем не менее, я думаю, что их «состояние становится нестабильным» - это другая точка зрения, чем моя.Я думаю о проблеме, когда один из плагинов выбрасывает исключение по любой причине.Я хотел бы, чтобы это было перехвачено, отправлено по электронной почте, выгружено и перезапущено (если возможно).
Итак, я создал приложение, которое запускается, ищет все .dll в своей папке.Проверяет, состоит ли dll из плагина.Создает новый AppDomain для этого плагина, и как только все будет загружено, он запустит каждый плагин.(Где каждый плагин может состоять из нескольких потоков, счастливо сосуществующих рядом с каждым другим).
Поэтому я также добавил там тайм-аут, который срабатывает через 5 секунд, чтобы выдать новое Exception ();Добавлено событие UnhandledException в AppDomain для его обработки.Но он поймал его, и после кэтинга все равно «рухнул» весь процесс, включая все дополнительные дочерние домены.
Но в цитате четко указано «выделить задачи, которые« могут »остановить процесс».».Так я что-то упускаю из жизни?Мой взгляд на цитату неправильный?