如何使用将同时接收相同数据的线程?

时间:2011-12-15 06:15:21

标签: c# multithreading

我想在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个警报。

3 个答案:

答案 0 :(得分:0)

如果重要的是你的方法是关于定期开启的设备。这意味着如果要测试服务器,则必须使用计时器执行轮询。
一组定时器使用您已经具有特定或随机间隔的代码调用例程将执行此任务,如只要您使用线程安全队列将响应排入队列并单独将它们出列并在控制台上写入它们。此外,如果将DeviceUniqueID连接到每个计时器(具有相同长度的另一个数组),则此例程可以接受不同的DeviceUniqueID(作为参数)。

答案 1 :(得分:0)

我怀疑问题实际上是锁定。我怀疑某些线程正在获取锁定然后阻塞ReadLine,从而阻止其他线程取得进展。假设WriteLine是线程安全的,你应该能够在五个线程中执行上面的代码,没有任何问题。

答案 2 :(得分:0)

听起来您的线程方法不是问题的原因。听起来您的服务器每个连接发送一个事件(5个连接),而不是每个连接发送5个事件。