Обычно я работал бы с асинхронным подходом на низкоуровневом сайте и, возможно, добавил бы некоторый механизм синхронизации поверх этого.Вот пример подхода, если вы получаете фрагменты данных и вам нужно объединить эти фрагменты в одно сообщение.
Так что на низкоуровневом сайте реализуйте BackgroundWorker, который постоянно проверяет поступающие данные и вызывает какое-то событиеесли вы что-то получили и поместили это в событие.
Над этим кто-то слушает события входящих данных и помещает все эти (возможно) фрагменты во внутреннюю очередь.Там он проверяет, достаточно ли у него данных для полного сообщения, может быть, он выполняет некоторую проверку ошибок и т. Д. Если у него есть полное сообщение, он вызовет событие для отправки этого сообщения всем слушателям.
Поверх этого помещается другой класс, который следит за сообщениями и реагирует на них.Этот класс, возможно, реализует некоторый механизм синхронизации, чтобы отслеживать, совпадает ли входящее сообщение с чем-то, что должно было произойти заранее.
Я думаю, что этот дизайн облегчает реагирование на данные, которые поступают, когда вы чего-то не ожидаете.А когда вы хотите завершить работу, вам не нужно ждать каких-либо тайм-аутов (возможно, очень маленького, который используется низкоуровневым BackgroundWorker для извлечения данных из источника, который не поддерживает механизм событий).