在Task.WhenAll中启动任务列表

时间:2018-06-19 03:03:40

标签: c# task task-parallel-library

我有一个Task列表,我在Task.WhenAll中添加了它们:

List<Task> taskList = new List<Task>();
taskList.Add(new Task(() => {  }));
taskList.Add(new Task(() => {  }));
taskList.Add(new Task(() => {  }));

Task.WhenAll(taskList)
                .ContinueWith((completedReference) =>
                {
                    taskList.ForEach(x => x.Dispose());
                });

在Task.WhenAll中添加任务后,有没有办法从List启动所有任务?

2 个答案:

答案 0 :(得分:0)

List<Task> taskList = new List<Task>();
taskList.Add(new Task(() => {  }));
taskList.Add(new Task(() => {  }));
taskList.Add(new Task(() => {  }));

foreach(var task in taskList)
{
    task.Start();
}

Task.WhenAll(taskList)

或者,您可以创建任务并在某个时刻启动它:

List<Task> taskList = new List<Task>();
taskList.Add(Task.Run(() => {  }));
taskList.Add(Task.Run(() => {  }));
taskList.Add(Task.Run(() => {  }));

答案 1 :(得分:0)

你可以试试这个

Task.Factory.StartNew(() => taskList.ForEach(task => task.Start()));

或者你可以尝试

Parallel.ForEach(taskList, task => task.Start());

在完成所有任务之前,它仍将阻止执行线程,但它将在内部线程池上执行启动操作,

了解更多How to start a List<Task> in parallel?