C# 带有参数的新任务的行为不是C中所期望的#
我正在运行以下简化代码:C# 带有参数的新任务的行为不是C中所期望的#,c#,task,C#,Task,我正在运行以下简化代码: public static void runCode(int num){ Console.WriteLine("Task {0}",num); for(int j=0;j<10;j++) Console.Write(num); } public static void Main(string[] args){ // some operations here for(int i=0;i<numIterations;i++){
public static void runCode(int num){
Console.WriteLine("Task {0}",num);
for(int j=0;j<10;j++)
Console.Write(num);
}
public static void Main(string[] args){
// some operations here
for(int i=0;i<numIterations;i++){
Console.WriteLine("Current number={0}",i);
Task.Run(()=>runCode(i));
}
// remaining code
}
为什么显示的数字总是相同的?可能对于static?就是对这种行为的解释,这就是您修复它的方式:
public static void runCode(int num)
{
Console.WriteLine("Task {0}", num);
for (int j = 0; j < 10; j++)
Console.Write(num);
}
public static void Main(string[] args)
{
// some operations here
for (int i = 0; i < 10; i++)
{
Console.WriteLine("Current number={0}", i);
var x = i;
Task.Run(() => runCode(x));
}
// remaining code
}
公共静态无效运行码(int num)
{
WriteLine(“任务{0}”,num);
对于(int j=0;j<10;j++)
控制台写入(num);
}
公共静态void Main(字符串[]args)
{
//这里有些行动
对于(int i=0;i<10;i++)
{
WriteLine(“当前编号={0}”,i);
var x=i;
Task.Run(()=>runCode(x));
}
//剩余代码
}
当运行代码(i)
在这些其他线程上运行时,您的循环已经完成,i的值为4。这也是一个多重副本,但我不能被激怒去寻找圣典。非常感谢!我也尝试过类似的解决方案,但我将i1的声明放在for循环之外,因此结果与之前相同。非常感谢。
public static void runCode(int num)
{
Console.WriteLine("Task {0}", num);
for (int j = 0; j < 10; j++)
Console.Write(num);
}
public static void Main(string[] args)
{
// some operations here
for (int i = 0; i < 10; i++)
{
Console.WriteLine("Current number={0}", i);
var x = i;
Task.Run(() => runCode(x));
}
// remaining code
}