0
Ich habe ein Problem mit System.Threading.Tasks
, ich verstehe nicht, warum es nicht funktioniert.Aufgabe für jeden [Vb.Net]
Dim table_sec As New Dictionary(Of String, List(Of Double))
table_sec.Add("SEC01", New List(Of Double)(New Double() {10.00, 5.00}))
table_sec.Add("SEC02", New List(Of Double)(New Double() {9.00, 8.00}))
table_sec.Add("SEC03", New List(Of Double)(New Double() {5.00, 2.00}))
Dim pair As KeyValuePair(Of String, List(Of Double))
Dim tasks As New List(Of Task)()
For Each pair In table_sec
Dim t As Task = Task.Run(Sub()
Console.WriteLine("Key = " & pair.Key)
End Sub)
tasks.Add(t)
Next
Task.WaitAll(tasks.ToArray())
habe ich immer dieses Ergebnis
Key = SEC03
Key = SEC03
Key = SEC03
Können Sie mir sagen, was falsch ist?
Ich bin mir nicht sicher, aber 'pair.Key' in der Task-Unter könnte ein Verweis auf das letzte Paar in der Liste sein, wenn die Aufgabe ausgeführt wird. Wenn Sie 'pair.Key' in der Schleife für jede Schleife außerhalb der Aufgabe drucken, sollte es alle drei Werte anzeigen, denke ich? – xander
ja, außerhalb der 'Task' zeigt es die 3 Werte – Mkn
Ich denke [this] (https://stackoverflow.com/questions/451779/how-to-tell-a-lambda-function-to-capture-a -copy-statt-einer-referenz-in-c) könnte Ihnen helfen, da Sie eine externe Variable in Ihrem Sub-Objekt erfassen, kann es etwas verwirrend werden. : D – xander