【问题标题】:Enqueue array of T to ConcurrentQueue<T>将 T 的数组排队到 ConcurrentQueue<T>
【发布时间】:2013-08-20 14:59:04
【问题描述】:

我想运行一个简单的硬件数据采集实验(基于 National Instruments 硬件)。

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

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

在 C++ 或类似语言中,您可以通过将新数据添加到预分配的各种缓冲区并将指针向上移动缓冲区来解决此问题。

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

Enqueue(double[]) 到 ConcurrentQueue ?

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

【问题讨论】:

    标签: c# collections concurrency


    【解决方案1】:

    确保你定义了一个ConcurrentQueue&lt;double[]&gt;,然后你可以这样做:

    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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-19
      • 1970-01-01
      • 2011-09-09
      • 1970-01-01
      • 2020-01-28
      • 2023-03-09
      • 1970-01-01
      相关资源
      最近更新 更多