数据行以错误或丢失的数据结束

Datarow ends up with wrong or lost data

我正在抓取 twitter 推文,我启动了多个后台工作者,他们执行以下操作:

For x as Integer = 0 to 5
    Dim BGW As New BackgroundWorker
    AddHandler BGW.DoWork, AddressOf TweetGrab
    BGW.RunWorkerAsync(tweeturl)
Next

Public TemporaryRows As New List(Of DataRow)
Private Sub TweetGrab(tweeturl as String)
    'some html stuff here

    Dim ImageUrl as String = twitterImage.Attributes("src").Value
    Dim ThumbnailUrl As String = ImageUrl & ":small"

    Dim DataRowTemporary As DataRow = DataTable1.NewRow()
    DataRowTemporary("ImageUrl") = ImageUrl 
    DataRowTemporary("ThumbnailUrl") = ThumbnailUrl 
    DataRowTemporary("Checked") = False

    'I detect the error even here

    TemporaryRows.Add(DataRowTemporary)
End Sub

稍后,我用 TemporaryRows 做一些事情。我遍历行并检查它们是否满足某些条件。

问题是 DataRowTemporary("Checked") 结束时是 DBNull 并且 DataRowTemporary("ThumbnailUrl")ImageUrl 完全不同,即使我指定了 Dim ThumbnailUrl As String = ImageUrl & ":small"

这种情况发生在大约 2/10 的情况下。我猜它与后台线程有关,但我不知道如何解决它。我可以在错误发生后重新编辑字段,但我想首先防止错误发生。

问题是在其他线程(并行)访问集合时更改集合。 您不能并行执行 add/remove,必须锁定集合以避免出现奇怪的错误。

SyncLock TemporaryRows 
     TemporaryRows 'Add/Remove
End SyncLock