避免使用消费者/生产者类的并发问题

时间:2018-01-15 23:57:13

标签: c# concurrency producer-consumer

因此,我正在构建一个具有对象列表的控制台应用程序。

  • 每1000毫秒,一个"制作人"正在执行HTTP请求并从结果中创建新对象,并将其添加到对象列表中。

  • 每1000毫秒,一个"消费者"正在分析列表中的所有对象。

  • 每2000毫秒,另一个"消费者"正在分析列表中的所有对象。

  • 每3500毫秒,另一个"消费者"正在分析列表中的所有对象。

偶尔,在任意时间,我想问一位消费者这个分析数据的结果是什么。

所以这听起来像是一个经典的生产者/消费者模式。在JavaScript中,这不是一个问题,因为它是非阻塞的。但是C#怎么样?我认为这可能是一场并发的噩梦。据我所知,这不能简单地使用Tasks来完成,因为你无法控制它是在同一个线程上下文中运行,还是在新线程中运行。

我正在寻找最简单的"如何完成上述案例。我已经研究了像TPL Dataflow这样的东西,也被认为是一个简单的事件循环模式"有了deltatime(就像在视频游戏中一样),你的建议是什么?

致以最诚挚的问候,

1 个答案:

答案 0 :(得分:1)

您可以使用thead安全集合,例如实现接口BlockingCollection<T>的{​​{1}}。

您可以阅读有关线程安全集合here的更多信息。