是Socket.SendAsync线程安全有效?
-
22-07-2019 - |
题
我用Silverlight的TCP通信摆弄,我被迫要使用的,在Silverlight运行时仅具有异步方法的System.Net.Sockets.Socket类。
我在想,如果两个线程在很短的时间内从另一个调用SendAsync在Socket实例会发生什么?
我的单担心是没有混合字节通过TCP信道去。
作为一个异步方法的我想强>邮件获取放置在队列中从其中一个线程出队所以没有这样的事情将会发生(掺混电线上的消息的内容)。
不过,我不知道和MSDN并不说明该方法的描述事情。就是这个人的确定
EDIT1:否,在调用之前锁定的对象上SendAsync如:
lock(this._syncObj)
{
this._socket.SendAsync(arguments);
}
不会帮助,因为这串行发送数据的请求没有实际发送的数据。
解决方案
为了调用SendAsync
你首先需要有人称与ConnectAsync
的实例SocketAsyncEventArgs
。其SocketAsyncEventArgs
的实例,它代表了客户端和服务器之间的连接。调用SendAsync
与刚刚被用于一个优秀的呼叫SocketAsyncEventArgs
会导致异常SendAsync
的同一个实例。
有可能使使用SendAsync
的不同实例的相同Socket
对象的SocketAsyncEventArgs
多个未完成呼叫,但只。例如(在一个平行的宇宙,这可能是necessay),你可以让多个HTTP职位,在同一时间在同一台服务器上,但不同的连接。这是完全可以接受的和正常的没有任何客户端服务器将弄不清楚哪个分组是哪个。
不隶属于 StackOverflow