我正在尝试实现一个通过套接字向服务器发送消息的模块。它将在多线程环境中使用,因此这个“客户端”对象在线程之间共享。我的问题是我应该在 Send 方法中使用一个锁块来使这个类线程安全吗?(可能是的,但我看到了很多示例代码,其中没有任何锁定。)
这是我的MessengerClient
课程的简化版本。
public class MessengerClient
{
private Socket socket;
public MessengerClient()
{
socket = new Socket(SocketType.Stream, ProtocolType.IPv4);
}
public void Connect(string host, int port)
{
socket.Connect(host, port);
}
public void SendMessage(IMessage message)
{
var buffer = ObjectConverter.ConvertToByteArray(message);
var args = new SocketAsyncEventArgs();
args.Completed += args_Completed;
args.SetBuffer(buffer, 0, buffer.Length);
//lock (socket)
//{
socket.SendAsync(args);
//}
}
}