Donc, ce n'est pas mon code et a été raccourci pour montrer le comportement, mais il donne des résultats très inattendus.Weird lock() comportement avec foreach
J'ai deux fonctions dans une classe et un verrou
object mylock = new object();
List<string> temp = new List<string>();
Func1(string)
{
lock(mylock)
{
temp.Add(string);
}
}
Func2()
{
lock(mylock)
{
temp.ForEach(p => Func1(p));
}
}
Maintenant, je sais que cela n'a aucun sens, mais quand Func2 est appelée, ne devrait pas Func1 impasse? Dans notre cas, il s'exécute. Merci.
func1 obtient certainement ce verrou, parce que je le traverse dans le débogueur. La classe est en fait un singleton (je sais, je sais ...), donc je sais qu'il n'y a qu'une instance de la classe. Je ne comprends pas ce qui se passe ... – Steve
@Steve. C'est ce que j'ai dit. Func1 peut obtenir le verrou, car il est appelé par Func2, qui a le verrou. –
désolé, j'ai lu cela totalement faux. Merci pour l'aide. – Steve