让我说:
private void MyMethod()
{
for (int a = 0; a < 10; a++)
{
for (int b = 0; b < 10; b++)
{
Thread thread = new Thread(() => MyThread(a, b));
thread.Start();
}
}
}
private void MyThread(int a, int b)
{
MoreMethods(a, b);
}
如何使此线程安全,即确保MyThread方法中的每个参数以及所有后续方法调用均保持被其调用的值?
答案 0 :(得分:3)
您的问题是a
和b
被lambda捕获。
只需复制:
for (int a = 0; a < 10; a++)
{
for (int b = 0; b < 10; b++)
{
int a2 = a, b2 = b;
Thread thread = new Thread(() => MyThread(a2, b2));
thread.Start();
}
}
现在捕获了a2
和b2
,但是它们具有本地作用域。