2

目前正在处理一个 C# 项目 - 我正在尝试做的一般想法是......

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

我计划让每个投资组合在它自己的线程上运行,这样当间隔过去时,每个投资组合可以继续下载数据,同时解析和运行规则,而不是一个一个地运行。然后应该将警报推送到包含警报队列的另一个线程(!)。当它接收到警报时,它会将它们发送给客户端。

有点多,但是用 C# 解决这个问题的最佳方法是什么 - 使用线程,或者像后台工作人员这样的东西,只是让警报队列在单独的线程上运行?

非常感谢任何建议,对于其中一些东西是新的,所以如果我完全错了,请随时告诉我:)

4

2 回答 2

5

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

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

于 2012-11-14T11:56:16.280 回答
0

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

当您的间隔计时器触发时:

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

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

于 2012-11-14T19:44:41.360 回答