Гарантия того, что рабочий поток продолжает работать - PullRequest
1 голос
/ 02 июня 2019

Моя программа использует шаблон производитель / потребитель, это означает, что мой производитель добавляет задачи в очередь, и мой потребитель выполняет эти задачи в фоновом режиме, когда в очереди есть что-то для выполнения.

Мой рабочий поток должениспользуйте последовательный порт, и стандартный способ использования последовательного порта состоит в том, чтобы открыть его в начале программы и держать его открытым до тех пор, пока он необходим (до выключения).Моя программа - это постоянно работающий веб-сервис, где у объектов обычно время жизни ограничено запросом.Эти две вещи в некоторой степени противоречат друг другу, поэтому мне нужно убедиться, что при получении запроса фоновый поток запускается и удерживает последовательный порт открытым, вместо того, чтобы открывать его для каждого запроса, что может быть более естественным в большинстве случаев.Таким образом, моей программе нужна высокая степень самодостаточности, она должна обнаруживать ошибки в рабочем потоке и перезапускать его при необходимости.

Существует ли метод гарантии того, что мой рабочий поток остается в рабочем состоянии?Я рассмотрел оборачивание кода всего рабочего потока в try / catch и отправку события в основной поток в блоке finally, чтобы рабочий можно было перезапустить.Или я мог бы постоянно посылать события «ping» в основной поток, чтобы сообщить ему, что рабочий поток все еще работает, или даже опросить рабочий поток из основного потока.

Существует ли стандартный способ сделать это?Какой самый надежный подход?Обратите внимание, что это нормально, если рабочий поток умирает или становится неспособным завершить свою работу по любой причине - я просто перезапущу поток и продолжу попытки, однако в идеале, если это произойдет, он сможет вернуть свою задачу в очередь.

Примеры в C # / F # / dotnet (framework) приветствуются.

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