在.net 6中的两个任务之间交换数据



我的应用程序中有两个独立运行的任务。其中一个从设备中获取数据,另一个应该收集数据

它们都是"永远循环",所以使用await对我来说不是一个选择。

我有嵌入式软件的背景,通常对于这样的事情,我会创建一个队列,其中一个任务将数据排队,而另一个任务将等待该队列中的项并将其从队列中取出以进行进一步处理。通常用于此目的的api也可以在RTOS。

我尝试实现相同的,但我发现,MessageQueue类是不可用的。net 6。虽然我可以把类似的东西拼凑在一起,但我想知道是否有一个现有的解决方案可以使用。

还是我的方法一开始就错了?

通常对于这样的事情,我会创建一个队列,其中一个任务将数据排队,而另一个任务将等待该队列中的项目并将其取出队列以进行进一步处理…我想知道是否有现成的解决方案可以使用。

正如Damien指出的,在System.Collections.Concurrent命名空间中有几个IProducerConsumerCollection<T>的实现。然而:

我的应用程序中有两个独立运行的任务。

如果您想要一个异步生产者/消费者队列,那么最现代的解决方案是System.Threading.Channels。通道是非常基本的,但非常有效。

也有更老但仍然可行的替代方案。你目前所描述的是一个基本的生产者/消费者场景,其中System.Collections.Concurrent(用于同步代码)或System.Threading.Channels(用于异步代码)是一个自然的选择。但如果你的实际场景更复杂(或变得更复杂),你想要一些更像管道或网格解决方案,有点演员的感觉,看看TPL Dataflow。

最新更新