我正在编写将连接到单个套接字的服务,然后读取连续且有时很多的数据。然后,我接收到的数据应该传递给另一个线程(服务中)进行处理,原因是处理可能要花一些时间,而我不想阻止套接字的接收。
我打算使用Begin或Async接收方法来处理数据,而不是让线程运行来读取并发队列或其他内容。我需要这样做以扩展到可能通过套接字传入的大量数据。有什么建议么?
最佳答案
我不确定如何使用异步接收来帮助处理。据我了解,您将有一个线程连接到套接字并读取连续的数据流。我假设线程可以将连续流分解为某种类型的记录,或者至少是可管理大小的块。然后,您必须使该数据可用于一个或多个处理线程。
我强烈建议您确实使用并发队列(实际上是BlockingCollection
)在读取数据的线程与将要进行处理的一个或多个线程之间进行通信。我建议使用BlockingCollection
有几个原因:
易于使用-没有明确的锁定代码
它不忙等待
它有效地处理N位读者和N位作家
您的是一个非常典型的生产者/消费者应用程序。生产者(读取套接字的线程)获取数据,将其放入队列中,然后一个或多个使用者(处理线程)可以读取和处理数据。我想不出一个比BlockingCollection
更简单,更有效或更有效的方法在.NET中执行此操作。