C#从一个数组/任务列表中如何将它们分配给特定数据

时间:2017-07-15 14:29:27

标签: c# multithreading

我有一个.csv文件,其中包含需要进行大量计算的数据。 棘手的是,每一行都有特定的数据组,其特征为" a"," b"," c" ....

例如:a,1,2,3,4-b,1,3,4,5-c,2,3,4,6 ......

我希望这个小组中的每个小组分别获得进程...所以1个线程用于" a" 1个线程用于" b"等等... 关于如何挑选数组或列出任务[1] - >的任何想法a,任务[2] - > b(匹配应基于线实际上具有值a,b,c ...如上所述的事实) 最后一项是每行可以有不同数量的数据组,例如

1st line --> {a},{b},{c}
2nd line --> {b},{d},{e}
10th line --> {a},{c},{e}

所以作业应该是动态的 谢谢你的帮助

1 个答案:

答案 0 :(得分:1)

使用以下方法处理文件。

    Dictionary<string, Task> tasks = new Dictionary<string, Task>();
    Dictionary<string, Queue<IEnumerable<string>>> queues = new Dictionary<string, Queue<IEnumerable<string>>>();

    foreach( var line in File.ReadAllLines("file.txt"))
    {
         var parts = line.Split('-');
         foreach( var part in parts )
         {
              var keyValues = part.Split(',');
              if( !tasks.ContainsKey( keyValues[0] ) )
              {
                  var queue = new Queue<IEnumerable<string>>();
                  queues[keyValues[0]] = queue;
                  queue.Enqueue(keyValues.Skip(1));
                  var task = Task.Run(() => Process(queue));
                  tasks[keyValues[0]] = task;
              }
              else
              {
                  queues[keyValues[0]].Enqueue(keyValues.Skip(1));
              }
         }
    }