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