ソケットを介してサーバーにメッセージを送信するモジュールを実装しようとしています。マルチスレッド環境で使用されるため、この「クライアント」オブジェクトはスレッド間で共有されます。私の質問は、このクラスをスレッドセーフにするために、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);
//}
}
}