Класс Socket в .NET предоставляет следующий метод:
Socket.BeginSend Method (IList<ArraySegment<Byte>>, SocketFlags, AsyncCallback, Object)
У меня есть класс BufferManager, который возвращает ArraySegment<byte>
указанного постоянного размера 2 КБ.Теперь у меня есть сообщение для отправки, скажем, оно имеет размер 10 КБ, поэтому я могу использовать 5 предварительно выделенных буферов для хранения этого сообщения и вызвать Socket.BeginSend(IList<ArraySegment>>...)
.Будет ли это сообщение отправлено атомарно, как если бы я просто использовал просто byte[]
(т. Е. Несколько параллельных операций BeginSend не смешивали бы сообщения на удаленном сайте)?
Редактировать: уточнить - яЯ использую сокет TCP / IP и моя программа вызывает BeginSend из нескольких потоков одновременно.Допустим, у нас есть два списка сегментов массива:
L1: a1 a2 a3
L2: b1 b2 b3
Теперь я вызываю BeginSend (L1 ...) и BeginSend (L2 ...) из двух потоковв то же время.Я хочу знать, не смешаются ли эти два списка на удаленной стороне, и я не буду читать что-то вроде: a1 b1 b2 a2 b3 a3.