使用单个源数据同时运行多个任务

时间:2019-04-10 12:14:03

标签: c# task

所以我如何使用txt文件作为输入一次运行多个任务。

加载源数据

var lines = File.ReadAllLines("file.txt")

运行任务

forearch(var line in lines)
{
   //I want to execute 3 tasks and each task needs to receive a line. At the end of each task he should pick up another line that has not been used and continue to the end of the file.

}

3 个答案:

答案 0 :(得分:1)

您看过Parallel.ForEach吗?

用法类似:

Parallel.ForEach(File.ReadLines("file.txt"), new ParallelOptions { MaxDegreeOfParallelism = 3 }, line => { \\ do stuff })

答案 1 :(得分:0)

也许是这样的:

async void Main()
{
    var lines = File.ReadAllLines("file.txt");
    int i = 0;
    var concurrency = 3;
    while (i < lines.Length)
    {
        var tasks = new List<Task>(concurrency);
        for (int j = 0; j < concurrency && i < lines.Length; j++)
        {
            tasks.Add(MyMethod(lines[i++]));
        }
        await Task.WhenAll(tasks);
    }
}
public Task MyMethod(string s)
{
    return Task.CompletedTask;
}

答案 2 :(得分:0)

您可以尝试以下操作:

private static async Task Main(string[] args) {
  const ushort concurrentWorkers = 5;
  var lines = File.ReadAllLines("file.txt");

  var concurrentSourceQueue = new ConcurrentQueue<string>(lines);

  var worker = Enumerable.Range(0, concurrentWorkers)
    .Select(_ => DoWorkAsync(concurrentSourceQueue));

  await Task.WhenAll(worker);
}

private static async Task DoWorkAsync(ConcurrentQueue<string> queue) {
  while (queue.TryDequeue(out var item)) {
    //process line here
  }
}