为什么以下代码按顺序执行?
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/