Csharp/C#教程:C#TPL如何知道所有任务都完成了?分享


C#TPL如何知道所有任务都完成了?

我有Loop生成任务。

码:

Task task = null; foreach (Entity a in AAAA) { // create the task task = new Task(() => { myMethod(a); }, Token, TaskCreationOptions.None); task.Start(); } 

正如你在每次迭代中看到的那样,任务对象有了新的初始化(.. new Task(()=> ..)我怎么知道所有的任务都完成了?

如果你用一个替换它

  Parallel.ForEach(..., () => myMethod(a), ...) 

然后,您将在ForEach结束时自动等待所有任务。

也许可以从一个单独的Task运行ForEach。

 var allTasks = new List(); foreach (Entity a in AAAA) { // create the task task = new Task(() => { myMethod(a); }, Token, TaskCreationOptions.None); // Add the tasks to a list allTasks.Add(task); task.Start(); } // Wait until all tasks are completed. Task.WaitAll(allTasks.ToArray()); 

您需要保留对循环中创建的所有任务的引用。 然后,您可以使用Task.WaitAll方法(请参阅MSDN参考 )。 您可以创建一个数组并将任务分配给该数组的元素(在C#2.0中),也可以使用LINQ:

 var tasks = AAAA.Select((Entity a) => Task.Factory.StartNew(() => { myMethod(a); }, Token, TaskCreationOptions.None)).ToArray(); Task.WaitAll(tasks) 

如果您不需要使用任务(显式),那么Henk建议使用Parallel.ForEach可能是一个更好的选择。

上述就是C#学习教程:C#TPL如何知道所有任务都完成了?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/953042.html

(0)
上一篇 2021年11月18日
下一篇 2021年11月18日

精彩推荐