如何在循环中创建任务并等待所有任务完成

Jam*_*ang 2 .net c# multithreading task async-await

private async void button1_Click(object sender, EventArgs e)
{
   await BackupFile();
}


public async Task BackupFile()
{ 
  await Task.Run(() =>
  {
    for (var i = 0; i < partCount; i++)
    {
      upload(FilePart);//how to creat a new task at here
      //i don't want to wait here, i want to upload all part at same time
    }
    //wait here.
    //if total part got 10, then how to wait 10 task complete
    //after 10 task complete
    Console.WriteLine("Upload Successful");
  });
}
Run Code Online (Sandbox Code Playgroud)

如何在循环中创建新任务以及如何等待所有任务完成以执行下一行代码

Ver*_*bon 6

您应该尝试任务组合器WhenAll:

public async Task BackupFileAsync()
{
    var uploadTasks = new List<Task>();
    for (var i = 0; i < partCount; i++)
    {
        var uploadTask = Task.Run(() => upload(FilePart));
        uploadTasks.Add(uploadTask)
    }

    await Task.WhenAll(uploadTasks);

    Console.WriteLine("Upload Successful");
}
Run Code Online (Sandbox Code Playgroud)

  • 同意@ScottChamberlain.我认为`var tasks = Enumerable.Range(0,partCount).Select(t => Task.Run(()=> upload(FilePart))); await Task.WhenAll(tasks);`简单易读. (5认同)