Nous utilisons des extensions parallèles dans une partie de notre application vb.net pour récupérer un datatable d'un dictonary (de ficelle, datatable). Dans la méthode pour récupérer la table, nous utilisons Monitor.TryEnter. Parfois, nous obtenons l'erreur "La méthode de synchronisation d'objet a été appelée à partir d'un bloc de code non synchronisé." Voici ce que notre méthode ressemble à:Monitor.TryEnter Conseils
Try
if Monitor.TryEnter(_ProductCollection, 200) = true then
_ProductCollection.TryGetValue(name, ReturnValue)
end if
Finally
Monitor.Exit(_ProductCollection)
End Try
Dois-je essayer de mettre en place une boucle pour nous assurer que nous obtenons le verrou, avant d'essayer de le quitter? Je pense que l'erreur est levée parce que j'essaye de faire le monitor.exit même si le monitor.tryenter est faux.
dictionnaires support de lecture de plusieurs threads à la fois, alors peut-être vous ne même pas besoin d'appels de moniteur (si vous écrivez potentiellement en même temps, alors vous avez besoin, et vous devez protéger l'écriture avec les mêmes appels de synchronisation). – zneak
Oui, nous lisons et écrivons en même temps. le code ci-dessus est très similaire à la fonction d'écriture. –