我想知道如果有多个线程使用System.Net.Sockets.NetworkStream.Read等待数据可用会发生什么:
numberOfBytesRead = myNetworkStream.Read(myReadBuffer, 0, myReadBuffer.Length);
共享myNetworkStream的位置。当数据可用时,是只有一个线程看到它还是所有线程都看到它?
我想知道如果有多个线程使用System.Net.Sockets.NetworkStream.Read等待数据可用会发生什么:
numberOfBytesRead = myNetworkStream.Read(myReadBuffer, 0, myReadBuffer.Length);
共享myNetworkStream的位置。当数据可用时,是只有一个线程看到它还是所有线程都看到它?
从文档中:
对简单的单线程同步阻塞 I/O 使用 Write 和 Read 方法。如果要使用单独的线程处理 I/O,请考虑使用 BeginWrite 和 EndWrite 方法,或 BeginRead 和 EndRead 方法进行通信。
...
可以在 NetworkStream 类的实例上同时执行读取和写入操作,而无需同步。只要写操作有一个唯一线程,读操作有一个唯一线程,读写线程之间就不会发生交叉干扰,也不需要同步。
所以我会说行为是不确定的。
如果您的 NetworkStream 是共享的,那么您的线程将相互干扰。根据我自己的经验,每个线程可以共享一个 Socket,例如,如果您为服务器执行此操作,则服务器上的每个线程都可以继续侦听同一个套接字,然后当客户端到达时,一个线程将开始为它服务,然后在另一个客户端到达后,其他线程将开始为它服务,并且它们不会相互干扰。