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
}