Похоже, вы пишете какой-то мультиплексор. Действительно, это должно работать нормально, если вы пишете всю полезную нагрузку (и префикс длины) в пределах одного lock
, и до тех пор, пока lockObject
представляет взаимоисключающий ресурс (то есть должен быть общим lockObject
для всех клиентов, с которыми мы не хотим сталкиваться).
Возможно, самый сложный вопрос: вы собираетесь читать ответ в этом методе (success / return-value / критический-fail) или вы собираетесь читать ответ асинхронно и позволить следующий писатель пишет в поток, пока летит первое сообщение ...
Для сравнения, при записи BookSleeve (мультиплексор Redis, полный исходный код доступен, если вам нужен некоторый ссылочный код), я выбрал другую стратегию: один выделенный поток, чтобы выполнить всю запись в поток, с все вызывающие просто добавляются в потокобезопасную очередь; таким образом, даже если есть отставание в работе, звонящие не задерживаются.