Недавно я недавно узнал некоторые основы многопоточности в VB.net, так как мне приходилось обрабатывать большой список записей и вставлять их в базу данных SQL один за другим. У меня есть код выглядят следующим образом:Многопоточная обработка Проблема
Private Sub btnLoadNow_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLoadNow.Click
Dim autoLoad1 As New Thread(AddressOf AutoLoad)
autoLoad1.Start()
Dim autoLoad2 As New Thread(AddressOf AutoLoad)
autoLoad2.Start()
Dim autoLoad3 As New Thread(AddressOf AutoLoad)
autoLoad3.Start()
Dim autoLoad4 As New Thread(AddressOf AutoLoad)
autoLoad4.Start()
Dim autoLoad5 As New Thread(AddressOf AutoLoad)
autoLoad5.Start()
Dim autoLoad6 As New Thread(AddressOf AutoLoad)
autoLoad6.Start()
Dim autoLoad7 As New Thread(AddressOf AutoLoad)
autoLoad7.Start()
Dim autoLoad8 As New Thread(AddressOf AutoLoad)
autoLoad8.Start()
Dim autoLoad9 As New Thread(AddressOf AutoLoad)
autoLoad9.Start()
End Sub
Private Sub AutoLoad()
for each Item as Record In ItemLists
Process Codes
Next
End Sub
Itemlists является глобальными списками я извлекаемые из базы данных, все выглядит нормально для меня, но когда я запустить эту программу, я обнаружил, что нити вставки одной записи в 9 раз в database (у меня всего 9 потоков), что заставляет меня думать, что, возможно, мне нужно специально назначить 1/9 списка для каждого потока? Есть ли другой способ сделать это, что не требует разделения списка, если нет, то как его разделить, а затем назначить? Любая помощь приветствуется.
У меня есть synclock внутри кода цикла. Не возражаете ли вы показать мне пример использования общей переменной? Благодарю. – miketonny