为什么下面的代码是顺序执行的?
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
;测试了这个版本。它也无法并行执行。肯定有一些我不理解的东西,但是当我尝试谷歌搜索时,我主要得到关于如何强制顺序执行的说明。
作为对以下答案中给出的警告之一的回应,我提供了以下方法供参考:
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);
}
再次编辑:谢谢大家!