gpt4 book ai didi

c# - 为什么这些任务顺序执行?

转载 作者:太空狗 更新时间:2023-10-29 23:08:58 27 4
gpt4 key购买 nike

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

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

再次编辑:谢谢大家!

最佳答案

只需将 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com