为什么以下代码按顺序执行?
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)
再次编辑:谢谢大家!
为什么下面的代码会顺序执行?
它不会,除非您在Count方法中具有同步对单个资源的访问的某些内容。如果它可以并行化,那么这将并行运行。
如果Count执行得非常快,那么您会发现任务完成的速度比计划新任务的速度快,这就是为什么它们可能全部按顺序执行。
| 归档时间: |
|
| 查看次数: |
793 次 |
| 最近记录: |