LINQ упростит это, только если Вы удаляете логику из своих хранимых процедур и повторно реализуете ее как linq запросы. Который был бы намного более устойчивым и легче протестировать, определенно. Однако это кажется, что Ваши требования устранили бы это.
TL; DR: Ваш дизайн имеет проблемы.
Вы можете обнаружить пробуждение, периодически сравнивая текущее системное время с предыдущим системным временем.
Изменить: вот пример, который, похоже, поможет вам определить, когда машина собирается спать: http://www.codeguru.com/cpp/wp/system/messagehandling/article.php/c6907
Я знаю, что это не совсем то, что вы ищете, но возможно, правильный ответ - попытаться написать код, предполагая, что ваши сокеты не обязательно будут работать. Существует множество причин, по которым соединение может обрушиться, например, из-за того, что база данных отключена для обслуживания или из-за того, что кто-то споткнулся о ваш кабель Ethernet. Я думаю, у вас были бы аналогичные проблемы с ошибками, если бы кто-то вытащил сетевой кабель во время работы вашего приложения, и это не является чем-то неслыханным, поэтому, возможно, лучше попытаться справиться с этими условиями изящно.
Вы можете просто JNI или JNA, чтобы перехватить события сна / пробуждения из ОС.
Из Windows Power Events (MSDN) вам нужно будет создать Обработчик окна и пустое окно для приема событий WM_POWERBROADCAST. Эта оконная процедура может затем вызвать функцию события в вашем Java-коде, чтобы всплыть сообщение.