第一次在这里发帖提问。对不起,如果标题需要工作。 :)
考虑以下代码(不是原始代码,而是简化版本):
Imports System.Threading.Tasks
Module Module1
Sub Main()
' just a sample array to loop in parallel.forEach.
' the sample parallel loop does not consume for this demonstration.
Dim things() As String = {"thing1", "thing2"}
Dim parallelLoopBody = Sub(s As String)
For i As Integer = 1 To 10
Dim j As Integer
For k As Integer = 1 To 10
j += (k * i)
Next
Console.WriteLine(j)
Next
End Sub
' when debugging the original code I set max 1 for easier debugging purposes
Dim po As New ParallelOptions With {.MaxDegreeOfParallelism = 1}
Parallel.ForEach(things, po, parallelLoopBody)
End Sub
End Module
这应该产生以下输出,如上所述:
55 165 330 550 825 1155 1540 1980 2475 3025 55 165 330 550 825 1155 1540 1980 2475 3025
但明确声明j = 0
并运行代码
55 110 165 220 275 330 385 440 495 550 55 110 165 220 275 330 385 440 495 550
当我逐步完成代码时,我意识到变量j
是"保持"循环的最后一次迭代的值。
但我希望j
每次都为0,因为它是一个值类型,我在循环体中声明它。
我能够通过明确地将j
设置为0来获得我期望的结果。
有人可以解释为什么会这样吗?