gpt4 book ai didi

c# - 遍历每个枚举值需要并行化

转载 作者:行者123 更新时间:2023-11-30 13:48:09 25 4
gpt4 key购买 nike

我在并行调用中做错了什么?

static void Main(string[] args)
{
TasteAll<HotCupOf>(TurnCoffeeVenMachineOn);
}

public static void TasteAll<Mode>(Action<Mode> Make)
{
foreach (Mode mode in Enum.GetValues(typeof(Mode)))
{
Task.Factory.StartNew(() => Make(mode) );
//Make(mode); //<-- Works Fine with normal call
}
Console.ReadLine();
}

enum HotCupOf
{
Black,
Latte,
Cappuccino,
Mocha,
Americano,
Espresso,
Chocolate,
Tea
}

public static void TurnCoffeeVenMachineOn(HotCupOf SelectedDrink)
{
Console.WriteLine(SelectedDrink);
}

最佳答案

您已经关闭了一个循环变量。您开始的每个任务都引用了同一个封闭变量,该变量在您迭代集合时会发生变化。

你需要这样的东西:

public static void TasteAll<Mode>(Action<Mode> Make)
{
foreach (Mode mode in Enum.GetValues(typeof(Mode)))
{
Mode localMode = mode;
Task.Factory.StartNew(() => Make(localMode) );
//Make(mode); //<-- Works Fine with normal call
}
Console.ReadLine();
}

在 C# 5 中,循环变量现在在语义上位于循环 block 内部,因此这是不必要的。参见 Eric Lippert 的 blog以供进一步讨论。

关于c# - 遍历每个枚举值需要并行化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13504797/

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