Посоветуйте паттерн. Суть:
Управляющий поток (обсчитывает полученные данные)
|
+-- Рабочий процесс 1 (сетевой сокет)
| |
| +-- Вспомогательный процесс (таймер-пинговалка)
|
+-- Рабочий процесс 2 (сетевой сокет)
|
+-- Вспомогательный процесс (таймер-пинговалка)
В любом из потомков управляющего потока может возникнуть исключение. Например, рабочие процессы получили с двух серверов данные, управляющий поток их забрал и вычисляет разницу для последующей синхронизации. В этот момент просыпается одна из пинговалок и обнаруживает, что удаленный сервер закрыл сетевой сокет. В этот момент надо прервать выполнение всего приложения (позакрывать еще открытые сокеты, потушить рабочие потоки и вспомогательные потоки, после чего погасить управляющий поток и выйти, распечатав прилетевшее исключение.
Как All делает прерывание выполнения потока команд в управляющем потоке, если, предположим, он только что вошел в функцию о сотне строк и в данный момент находится на первой из них (до последней доползет через часик, но данные не актуальны уже сейчас - соединения накрылись).
Городить лапшу из однострочных методов, главной фишкой которых будет проверить очередь ошибок перед собственно выполнением задачи не хотелось бы.