gpt4 book ai didi

c# - 在 for 循环中创建新线程并传递参数

转载 作者:行者123 更新时间:2023-12-04 22:44:49 25 4
gpt4 key购买 nike

考虑这个代码:

for(int i = 0; i < 10; i ++)
{
new Thread(() => Test(i)).Start();
}
Test(int i)功能:
public void Test(int i)
{
Console.WriteLine("=== Test " + i);
}

实际输出:

=== Test 3
=== Test 4
=== Test 4
=== Test 5
=== Test 5
=== Test 5
=== Test 9
=== Test 9
=== Test 9
=== Test 10



如您所见,有些数字丢失了,有些数字重复了。

预期输出:

我希望以随机顺序看到所有数字。

问题

我应该锁定任何变量/方法吗?我怎样才能解决这个问题?

最佳答案

Should I lock any variables/methods? How can I fix this?



你的问题是 Closure 和 Captured Variables

将您的代码更改为
for(int i = 0; i < 10; i ++)
{
int tmp = i;
new Thread(() => Test(tmp)).Start();
}

更多信息: http://csharpindepth.com/articles/chapter5/closures.aspx或者
http://geekswithblogs.net/rajeevr/archive/2012/02/26/closures-and-captured-variable.aspx

关于c# - 在 for 循环中创建新线程并传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32127558/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com