我建立了与套接字服务器的连接,然后开始极大地读取和写入数据。 立即发生异常:
mscorlib.dll中出现“System.InvalidOperationException”类型的异常,但未在用户代码中处理
其他信息:该流目前正在流上的上一个操作中使用。
如何检测
_reader.ReadLineAsync();
目前正在接收一些数据,我应该等待写作,反之亦然?
客户端使用此类,它基本上将收到的数据从服务器发送回服务器。
public class TcpClientWorker2
{
private TcpClient _client;
private Thread _t;
private NetworkStream _networkStream;
private StreamWriter _writer;
private StreamReader _reader;
public TcpClientWorker2()
{
var ipHostInfo = Dns.Resolve(Dns.GetHostName());
var ipAddress = ipHostInfo.AddressList[0];
_client = new TcpClient();
_client.Connect(ipAddress, 10000);
_t = new Thread(Run);
}
public async void Run()
{
_networkStream = _client.GetStream();
_reader = new StreamReader(_networkStream);
_writer = new StreamWriter(_networkStream) { AutoFlush = true };
while (true)
{
var data = await _reader.ReadLineAsync();
//perform callback (send the data immediately back to server)
}
}
public void Start()
{
_t.Start();
}
public async Task Send(string text)
{
await _writer.WriteLineAsync(text);
}
}
答案 0 :(得分:1)
可以在NetworkStream类的实例上同时执行读写操作,而无需同步。只要有一个用于写操作的唯一线程和一个用于读操作的唯一线程,读写线程之间就不会存在交叉干扰,也不需要同步。
我们可以在您的代码中看到只有一个线程读取,但您的代码中没有确认只有一个线程写入。 这是你应该进一步调查的部分。