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