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

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());

我还使用Parallel.Invoke测试了此版本;它也无法并行执行。可能有些我不了解,但是当我尝试使用Googling进行搜索时,我通常会得到有关如何强制执行顺序执行的说明。

作为对以下答案中提出的一项警告的回应,我提供了以下方法供引用:
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);
}

再次编辑:谢谢大家!

最佳答案

只需将tasks.Add(Task.Factory.StartNew(() => Count(ref counter, block)));替换为Console.WriteLine并调试您的代码即可。

您永远不会创建多个任务。

for (int i = 0; i <= max; i += block)
{
    if (i + block >= max)
        Console.WriteLine(i);
    else
        block = max - i;

}

关于c# - 为什么这些任务按顺序执行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14165683/

10-17 00:58