gpt4 book ai didi

silverlight - Socket.SendAsync 线程安全有效吗?

转载 作者:可可西里 更新时间:2023-11-01 02:33:35 27 4
gpt4 key购买 nike

我正在摆弄 Silverlight 的 TCP 通信,我被迫使用 System.Net.Sockets.Socket 类,它在 Silverlight 运行时只有异步方法。

我想知道如果两个线程在很短的时间内彼此调用 Socket 实例上的 SendAsync 会发生什么情况?

我唯一担心的是不要让混合字节通过 TCP channel 。

作为一个异步方法我想消息被放置在一个队列中,单个线程从该队列中出队,所以不会发生这样的事情(混合在线消息的内容)。

但我不确定,MSDN 没有在方法描述中说明任何内容。有人确定吗?

EDIT1:不,在调用 SendAsync 之前锁定对象,例如:

lock(this._syncObj)
{
this._socket.SendAsync(arguments);
}

将无济于事,因为这会序列化发送数据的请求,而不是实际发送的数据。

最佳答案

为了调用 SendAsync,您首先需要使用 SocketAsyncEventArgs 的实例调用 ConnectAsync。它是 SocketAsyncEventArgs 的实例,表示客户端和服务器之间的连接。使用刚刚用于对 SendAsync 的未完成调用的相同 SocketAsyncEventArgs 实例调用 SendAsync 将导致异常。

可以对同一 Socket 对象的 SendAsync 进行多次未完成调用,但只能使用 SocketAsyncEventArgs 的不同实例。例如(在平行宇宙中,这可能是必要的)您可以同时向同一服务器发送多个 HTTP 帖子,但连接不同。这是完全可以接受的,正常情况下客户端和服务器都不会混淆哪个数据包是哪个。

关于silverlight - Socket.SendAsync 线程安全有效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1443531/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com