为什么这些任务按顺序执行?

5 c# parallel-processing task

为什么以下代码按顺序执行?

List<Task> tasks = new List<Task>();

for (int i = 0; i <= max; i += block)
{
    if (i + block >= max)
        tasks.Add(Task.Factory.StartNew(() => Count(ref counter, block)));
    else
        block = max - i;
}

Task.WaitAll(tasks.ToArray());
Run Code Online (Sandbox Code Playgroud)

我也测试了这个版本的使用Parallel.Invoke; 它也不能并行执行.肯定会有一些我不理解的东西,但是当我尝试谷歌搜索时,我主要得到关于如何强制顺序执行的说明.

作为对以下答案中给出的警告之一的回应,我已经包括以下方法供参考:

static void Count(ref int counter, int num)
{
    int localCounter = 0;
    for (int i = 0; i < num; i++)
        if (Coin()) localCounter++;
    System.Threading.Interlocked.Add(ref counter, localCounter);
}
Run Code Online (Sandbox Code Playgroud)

再次编辑:谢谢大家!

Ser*_*rvy 1

为什么下面的代码会顺序执行?

它不会,除非您在Count方法中具有同步对单个资源的访问的某些内容。如果它可以并行化,那么这将并行运行。

如果Count执行得非常快,那么您会发现任务完成的速度比计划新任务的速度快,这就是为什么它们可能全部按顺序执行。