В моем приложении я выполняю асинхронную связь через TCP-сокет.
Мне не нравится тот факт, что операции отправки и получения (синхронизация или асинхронность) класса Socket могут завершаться до того, как будет передано запрошенное количество байтов. Например: когда я хочу прочитать X байтов из сокета, я не хочу заботиться о том, сколько операций чтения эффективно необходимо для достижения этого (в моей логике приложения). Я просто хочу получать уведомления, когда он закончится (или когда произошла ошибка).
Было бы неплохо иметь что-то вроде BeginSendFixed, EndSendFixed, BeginReceiveFixed и EndReceiveFixed. Они будут вести себя точно так же, как BeginSend, EndSend, BeginReceive, EndReceive, но не будут вызывать обратный вызов до того, как будет передано запрошенное количество байтов.
Я думаю о том, чтобы реализовать это самостоятельно, основываясь на:
http://msdn.microsoft.com/en-us/magazine/cc163467.aspx
В функции DoTaskHelper я бы вызывал столько (синхронно) Send или Receive, пока все данные не будут переданы.
Это путь или есть другой (лучший) способ скрыть необходимость множественных отправок / приемов от логики моего приложения?