0
我需要幫助,瞭解如何解決此比賽情況。下面是代碼:Parallel.Foreach內的比賽條件與列表
Task.Factory.StartNew(Sub()
' Do something...
dim newPeople as new List(Of Person)
dim myNames as ConcurrentBag(Of String) = GetNames()
Parallel.ForEach(myNames, Sub(name)
Dim person as new Person
person.Name = name
person.Gender = "MALE"
newPeople.Add(person)
GridView.BeginInvoke(Sub()
GridView.DataSource = newPeople
End Sub)
' Do something...
dim index as Integer = newPeople.FindIndex(Function(p) p.Name = name) ' Race condition error
newPeople(index).Gender = "FEMALE"
GridView.Invoke(Sub()
GridView.DataSource = newPeople
End Sub)
End Sub)
End Sub, param ,TaskCreationOptions.None)
這段代碼基本上做的是這樣的:
- 設置在對象的名稱和人的性別
- 添加此人對象的人的名單
- 網格視圖顯示(顯示前後)
- 做些事情後,改變人的性別
- 顯示在person元素更新後,在gridview中使用y。
結果結果:在執行任務期間,gridview會自動更改狀態。
我對如何克服這個問題想法不多。你能建議什麼來解決這個問題嗎?
在「做某事」期間會發生什麼?它是相關的嗎? – 2015-02-10 03:14:01
'do something'根據表名處理數據。一旦完成,它就會更新(或者應該更新)列表中對象的性別。 – Musikero31 2015-02-10 06:56:07