Je cette sous:ajouter des lignes à une table de données avec Parallel.For
Private Sub error_out(ByVal line As Integer, ByVal err_col As Integer, ByVal err_msg As String)
Dim ln = t_erori.Rows.Add
ln.Item(0) = line
ln.Item(err_col) = err_msg
ln.Item(3) = err_col
End Sub
Ceci est appelé par plusieurs fonctions en cours d'exécution dans une boucle de Parallel.For.
Le problème est que parfois (totalement aléatoire) je reçois une erreur:
Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
sur la ligne Dim ln = t_erori.Rows.Add
.
Je suppose que c'est parce qu'il essaie d'ajouter deux fois la même ligne. Comment puis-je faire ce travail? Ou quelle autre méthode pourrais-je utiliser pour faire ceci?
J'ai besoin de cette datatable parce que mon application écrit des résultats là-dedans, mais toute autre méthode pour stocker les résultats qui fonctionnent avec parallel.for serait ok.
Existe-t-il un type de structure de données sans thread pour les opérations d'écriture? – Iulian
@Iulian http://stackoverflow.com/questions/2967057/is-it-possible-to-create-thread-safe-collections-without-locks – Andrey
la méthode spinlock fonctionne bien, merci – Iulian