C#-多个生产者线程和一个消费者线程



目前正在处理C#项目-我想做的事情的总体想法是…

用户具有一个或多个具有他们感兴趣的符号的公文包,每个投资组合将符号上的数据下载到csv,对其进行解析,然后对数据运行一组规则,警报是根据这些规则的结果生成的只要设定的间隔超过,投资组合就应该下载数据等

我计划让每个公文包都在自己的线程上运行,这样,当间隔结束时,每个公文包都可以同时下载数据、解析和运行规则,而不是一个接一个。然后应该将警报推送到另一个包含警报队列的线程(!)上。当它接收到警报时,它会将其发送到客户端。

有点多,但用C#实现这一点的最佳方法是什么——使用线程,或者像后台工作程序一样,让警报队列在一个单独的线程上运行?

任何建议都非常感谢,对这些东西都是新手,所以如果我完全错了,请随时告诉我:)

您可以使用阻塞集合。这是c#4.0中支持生产者-消费者场景的新功能。

它还支持1个消费者和多个生产者。

如果这完全是间隔驱动的,并且您可以在每个间隔结束时将警报上传到客户端,那么您可以使用一种简化的方法:

当您的间隔计时器启动时:

  1. 使用TPL启动同步任务来解析数据,为每个任务提供一个回调方法,将警报传递回main
  2. 回调将警报写入由lock语句保护的List
  3. 等待所有任务完成。然后执行一个延续例程,将警报转发到客户端
  4. 重新启动间隔计时器

如果您需要在上传完成前开始处理下一个间隔,您可以使用双缓冲方法,即写入一个列表,将其赋予上传方法,然后开始向新列表写入警报,在收集和上传警报时在列表之间来回切换。

最新更新