Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在循环中创建任务_C#_Multithreading_Task Parallel Library - Fatal编程技术网

C# 在循环中创建任务

C# 在循环中创建任务,c#,multithreading,task-parallel-library,C#,Multithreading,Task Parallel Library,是否可以在循环内创建如下任务: 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 = n

是否可以在循环内创建如下任务:

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);
}
此代码正在运行,但我无法控制并行度(最大线程数)。 我不知道这种做法是否正确?

描述了如何重写Task Scheduler类以达到您想要的效果。它被称为
limitedconcurrenceyleveltaskscheduler
,但有一个小建议。。。我已经工作了2个月,以获得一个绝对节省工作和快速的解决方案,为我的要求,所以你必须调查这项任务的大量时间!你应该考虑这个问题的其他解决方案。


顺便说一句,您可以查看PLinq库和属性。但正如mircosoft开发人员在一次研讨会上告诉我的那样。不要那样做!。任务库和PLinq库在该领域进行了高度优化,因此,如果您更改,将出现巨大的性能问题

有没有理由不使用并行LINQ?这听起来是一种更自然的方法。为什么需要控制线程数?@JonSkeet您可以帮我使用P-LINQ!。我是TPL和LINQ的新手:)我不理解您的文字中使用的算法,先生。好吧,简短的版本“这是可能的,但不要这样做。这很难管理,任务很长,如果您没有花两个月的时间,您将获得gigant性能滞后”;-)自由创造你自己的答案,而不是批评别人。。。我不是批评你的答案,只是批评你误导人的打字方式。