Я возился с TCP-связью Silverlight и был вынужден использовать класс System.Net.Sockets.Socket, который во время выполнения Silverlight имеет только асинхронные методы.
Мне было интересно, что произойдет, если два потока вызовут SendAsync для экземпляра Socket в очень короткое время один из другого?
Мое единственное беспокойство заключается в том, чтобы не смешивать байты, проходящие через канал TCP.
Будучи асинхронным методом Полагаю, сообщение помещается в очередь, из которой исключается один поток, поэтому никаких подобных вещей не произойдет (перемешивание содержимого сообщения в сети).
Но я не уверен, и MSDN ничего не указывает в описании метода. Кто-нибудь уверен в этом?
EDIT1: Нет, блокировка объекта перед вызовом SendAsync, например:
lock(this._syncObj)
{
this._socket.SendAsync(arguments);
}
не поможет, поскольку при этом сериализуются запросы на отправку данных, а не фактически отправленных данных.