gpt4 book ai didi

.net - 将多个参数传递给多个线程

转载 作者:行者123 更新时间:2023-12-01 12:59:29 26 4
gpt4 key购买 nike

我有一个创建多个线程的循环:

SomeClass..

Dim someNumber As Integer = 0
Dim somethingElse As Integer = 10
Dim myThread(500) As System.Threading.Thread

For i As Integer = 0 To 500
someNumber += 1
somethingElse += 10

myThread(i) = New Thread(Sub() myThreadFunction(someNumber, somethingElse))
myThread(i).Start()
Next

For j As Integer = 0 To 500
myThread(j).Join()
Next

Sub myThreadFunction(ByVal someNumber As Integer, ByRef somethingElse As Integer)

DoStuff

End Sub

现在我的问题是有时我将错误的值传递给 myThreadFunction,通常是应该在循环的下一次迭代中传递的值。

我是不是做错了什么,还有更好的方法吗?

最佳答案

这是因为 lambda 在错误的范围内关闭了您的变量。 Eric Lippert 在 Closing over the loop variable considered harmful 中详细描述了这个问题。 .

要实现这一点,您需要在适当的范围内引入一个临时变量:

For i As Integer = 0 To 500
someNumber += 1
somethingElse += 10

' Make some locally scoped variables
Dim temp1 As Integer = someNumber
Dim temp2 As Integer = somethingElse

' Use the temporaries
myThread(i) = New Thread(Sub() myThreadFunction(temp1, temp2))
myThread(i).Start()
Next

单独说明:我建议还考虑使用 ThreadPoolTask Parallel Library而不是手动创建线程。通常,对于大多数场景来说,这是一种更好的方法。

关于.net - 将多个参数传递给多个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7425125/

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