Недавно я изменил цикл For Each на цикл Parallel.ForEach. Я обеспокоен тем, что объект объявляется вне цикла, но назначается во время итерации цикла. Вот упрощенный код.
Dim results As ModelResults
Dim noResultsModel As New List(Of ModelResults)
Dim lock As New Object
Parallel.ForEach(_modelEngines,
Sub(model)
results = model.Execute
If results IsNot Nothing Then
SyncLock lock
noResultsModel.Add(results)
End SyncLock
End If
results = Nothing
End Sub)
Есть ли потенциальное состояние гонки с объектом результатов? Было бы что-то другое, если бы я переместил объявление результатов в цикл for?