如何使用同时接收相同数据的线程
本文关键字:数据 线程 何使用 | 更新日期: 2023-09-27 18:17:50
我想用c#创建一个控制台应用程序,它将连接到本地推送服务器,并将从它接收消息。
我已经创建了一个应用程序,它能够从推送服务器读取响应,通过使用以下代码进行'单个'连接:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://192.168.15.174/MvisumPushServer/PushServer.ashx?op=2&DeviceUniqueID=50211&ConnectionTimeout=30&ConnectionMechanism=Wifi&OSVersion=10&DeviceMake=Android&DeviceModel=sdk");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream stream = null;
stream = response.GetResponseStream();
StreamReader reader = new StreamReader(stream);
s = reader.ReadLine();
Console.WriteLine(s);
现在我想为使用线程的单个程序中的5个或更多连接做同样的事情。这些连接应该单独接收所有消息,并将其显示到控制台。例如,如果在控制台从推送服务器生成5个通知,则应该编写总共25个警报,即每个连接接收来自推送服务器的每个消息。我试过使用Lock(this),但是控制台总共显示了5个警报。
如果重要的话,你的方法是关于一个定期打开的设备。这意味着如果您想测试服务器,就必须使用计时器来执行轮询。只要你使用线程安全的Queue对响应进行排队,并分别对它们进行排队,然后在控制台中写入它们,一个定时器数组就可以用你已经拥有的代码以特定的或随机的间隔调用一个例程。此外,如果您将DeviceUniqueID连接到每个计时器(具有相同长度的另一个数组),则此例程可能接受不同的DeviceUniqueID(作为参数)。
我怀疑问题实际上是锁。我怀疑某些线程正在获取锁,然后阻塞在ReadLine上,从而阻止其他线程取得进展。假设WriteLine是线程安全的,您应该能够在五个线程中执行上述代码而不会出现问题。
听起来您的线程方法不应该对这个问题负责。听起来你的服务器在每个连接发送一个事件(5个连接),而不是每个连接发送5个事件。