gpt4 book ai didi

c# - 在循环中创建任务

转载 作者:太空宇宙 更新时间:2023-11-03 11:00:02 25 4
gpt4 key购买 nike

是否可以像这样在循环中创建任务:

List<Task<string>> tasks = new List<Task<string>>();
for (int id = 0; id < 1000; id++)
{
tasks.add(new Task<string>((tId) =>
{
var taskId = (int)tId;
var rand = new Random(taskId);
long sum = 0;
for (int i = 0; i < 100000; i++)
{
sum += rand.Next(1000);
}
return string.Format("Task {0}: {1}", taskId, sum) ;
}, id));
}

然后像这样开始所有任务:

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

然后等待全部完成:

Task.WaitAll(tasks.ToArray());

然后收获结果:

foreach (var task in tasks)
{
Console.WriteLine(task.Result);
}

此代码有效,但我无法控制并行度(最大线程数)。也不知道这种做法对不对?

最佳答案

This MSDN artical描述了如何重写 Task Scheduler 类以达到您想要的效果。它被称为 LimitedConcurrencyLevelTask​​Scheduler 但是一个小建议......我已经工作了 2 个月以获得一个绝对节省工作和快速解决我的需求的解决方案所以你必须在这个任务中调查很多时间!您应该考虑该问题的其他解决方案。

顺便说一下,您可以查看 PLinq 库和 MaxDegreeofParallelism属性(property)。但正如微软开发人员在研讨会上告诉我的那样。不要那样做! Task 库和 PLinq 库在该领域进行了高度优化,因此如果您更改它,您将遇到巨大的性能问题

关于c# - 在循环中创建任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18044845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com