2
私はTcpSocketから読み込むためにStreamReaderを使い、そのTcpSocketに書き込むためにStreamWriterを使用しています。私はあるスレッドで読書コードを持ち、別のスレッドで書くコードを持っていたいと思います。どのようにスレッドセーフな方法でこれを行うのですか?StreamReader/StreamWriterを使用した基本的なマルチスレッド
私は次の操作を行う場合は、その後、私はライター・スレッドは、多くの場合、ブロックされます推測:
ここlock (tcpClient) {
streamReader.ReadLine();
}
は、作家のコードのようになります。
lock (tcpClient) {
streamWriter.WriteLine(line);
}
回答ありがとうございますが、これはどこに文書化されていますか? MSDNによると、StreamReaderとStreamWriterのインスタンスメンバーはスレッドセーフであるとは保証されていません。 – Tom
どこに書かれているか分かりません。スレッドセーフティステートメントは、ほぼすべてのクラスに現れる標準的な定型文です。 .NET SocketクラスはWinsock APIのラッパーです。したがって、 'StreamWriter.WriteLine'呼び出しは、最終的に送信バッファにバイトを配置するWinsockの' send'関数を呼び出します。 'StreamReader.ReadLine()'コールは、受信バッファからバイトを読み取るWinsock 'receive'関数を呼び出します。したがって、1つのスレッドだけが送信バッファに書き込みを行い、1つが受信バッファから読み取る限り、共有されるリソースはありません。 – dtb