将T数组排入ConcurrentQueue <t> </t>

时间:2013-08-20 14:59:04

标签: c# collections concurrency

我想进行简单的硬件数据采集实验(基于NI硬件)。

实际的采集在一个线程中运行,其中数据(以双精度的形式)可用作double []。返回值数组可以是任意长度,具体取决于数据进入的速度。

我需要通过附加它将这些数据添加到全局数据集中。

在C ++等中,您可以通过将新数据添加到预先分配的各种缓冲区并将指针移到缓冲区来解决此问题。

在C#中我不太确定,我可以这样做:

将(double [])排队到ConcurrentQueue?

必须迭代double []并在每个元素上调用enqueue似乎很愚蠢。

1 个答案:

答案 0 :(得分:5)

确保定义ConcurrentQueue<double[]>然后您可以执行以下操作:

System.Collections.Concurrent.ConcurrentQueue<double[]> concurrentQueue = 
      new System.Collections.Concurrent.ConcurrentQueue<double[]>();
concurrentQuey.Enqueue(new double[] { 1, 3, 4, });
concurrentQuey.Enqueue(new double[] { 4, 5, 6, });

稍后如果你需要一个扁平的双项目数组,那么你可以这样做:

double[] flattenedArray = concurrentQueue.SelectMany(r => r).ToArray();