小编s.d*_*uro的帖子

具有方法参数参考值与值的线程安全

我对线程安全的方法参数的理解是:通过值传递到方法中的参数作为方法调用的参数中给出的数据的副本传递,因此它们对于该方法调用是唯一的,不能由任何其他任务更改。相反,参考参数可能会因在其他任务中运行的代码而易于更改。

话虽如此,我仍然不太清楚为什么下面的代码(不制作循环计数器的本地副本)在每个线程中返回相同的数字。

static void ExampleFunc(int i) =>
            Console.WriteLine("task " + i);
Run Code Online (Sandbox Code Playgroud)
for (int i = 0; i < 10; i++)
{
    int taskN = i; //local copy instead of i
    Task.Run(() => Func(i));
}
Run Code Online (Sandbox Code Playgroud)

实际输出是:任务10十次,
我通过传递taskN而不是i来获得正确的输出(任务1到10)。

由于传递了类型值参数,因此我期望得到相同的结果。

c# multithreading parameter-passing thread-safety

0
推荐指数
1
解决办法
75
查看次数