C#临时变量---闭包

    技术2022-07-10  138

    代码段1的输出结果不规则,大都>45 代码段2的输出和预期的一样,1-49全部输出 原因是两断代码i对于循环体都是全局变量,而外层的for循环运行很快,内层需要创建任务,当内层开始执行第一个任务的时候,外层for循环已经快结束或已经结束,所以代码段1的输出结果不规则 代码段2每次进行循环都会创建在新的作用域中创建一个新的临时变量,执行每个task的时候都会找对应作用域中的临时变量

    代码段1for (int i = 0; i < 50; i++) { Task.Run(() => { Console.WriteLine(i);//结果不是 }); } 代码段2for (int i = 0; i < 50; i++) { int k = i; Task.Run(() => { Console.WriteLine(k);输出 1-49 }); }
    Processed: 0.010, SQL: 9