gpt4 book ai didi

.net-4.0 - Foreach 循环和任务

转载 作者:行者123 更新时间:2023-12-04 15:04:49 25 4
gpt4 key购买 nike

我从编码指南中知道我读过你不应该这样做

for (int i = 0; i < 5; i++) 
{
Task.Factory.StartNew(() => Console.WriteLine(i));
}
Console.ReadLine();

因为它会写 5 个 5,我明白这一点,我想我明白为什么会这样。我知道解决方案就是这样做
for (int i = 0; i < 5; i++) 
{
int localI = i;
Task.Factory.StartNew(() => Console.WriteLine(localI));
}
Console.ReadLine();

然而,这样的事情可以做吗?
foreach (MyClass myClass in myClassList) 
{
Task.Factory.StartNew(() => myClass.DoAction());
}
Console.ReadLine();

或者我需要做我在 for 循环中做的同样的事情。
foreach (MyClass myClass in myClassList) 
{
MyClass localMyClass = myClass;
Task.Factory.StartNew(() => localMyClass.DoAction());
}
Console.ReadLine();

最佳答案

foreach 完全相同的问题.下列:

foreach (MyClass myClass in myClassList) 
{
Task.Factory.StartNew(() => myClass.DoAction());
}

很可能总是在列表的最后一个元素上调用 DoAction 方法,可以像这样修复:
foreach (MyClass myClass in myClassList) 
{
MyClass localMyClass = myClass;
Task.Factory.StartNew(() => localMyClass.DoAction());
}

但是,我建议您使用以下内容,而不是依赖局部变量:
for (int i = 0; i < 5; i++)
{
Task.Factory.StartNew(localI => Console.WriteLine(localI), i);
}

关于.net-4.0 - Foreach 循环和任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2925303/

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