C# 当2个客户端正在发送数据时,StreamReader.ReadLine挂起

C# 当2个客户端正在发送数据时,StreamReader.ReadLine挂起,c#,streamreader,readline,C#,Streamreader,Readline,我在做一个实验,我得到了一个streamreader和两个TcpClient streamreader,streamreader继续从客户端1读取数据,直到客户端1发送了一些数据,才从客户端2读取数据 因此,如果客户端1从未发送任何内容,streamreader将永远不会从客户端2读取 我已经试了很长时间来修复它 while(true) { foreach (Client client in Clients)

我在做一个实验,我得到了一个streamreader和两个TcpClient streamreader,streamreader继续从客户端1读取数据,直到客户端1发送了一些数据,才从客户端2读取数据 因此,如果客户端1从未发送任何内容,streamreader将永远不会从客户端2读取

我已经试了很长时间来修复它

       while(true) 
            {
             foreach (Client client in Clients)
                {
                    var sr = client.clientStreamReader;
                    string data;
                    try
                    {
                        if ((data = sr.ReadLine()) != null)
                        {
                             Console.WriteLine(data);
                        }
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e);
                    }
                }
          }

(客户端是一个类,用于保存streamreader并写入)

为每个客户端提供一个单独的线程,请尝试以下操作:

void ReadFromClient(Client client)
{
     var sr = client.clientStreamReader;
     string data;
     try
     {
       if ((data = sr.ReadLine()) != null)
       {
          Console.WriteLine(data);
       }
     }
     catch (Exception e)
    {
       Console.WriteLine(e);
    }
}
然后在每次启动新线程时循环客户端:

foreach (Client client in Clients)
{
   Task.Factory.StartNew(new Action(() =>  ReadFromClient(client)) );
}

一个问题是我如何获得客户机,因为它是在foreach循环中定义的,而不是在线程中定义的