C# Language Lancer une exception dans une déclaration de verrouillage


Exemple

Le code suivant libère le verrou. Il n'y aura pas de problème. L'énoncé de verrouillage des coulisses fonctionne comme try finally

lock(locker)
{
    throw new Exception();
}

Plus peut être vu dans la spécification C # 5.0 :

Une déclaration de lock du formulaire

lock (x) ...

x est une expression d'un type de référence , est précisément équivalent à

bool __lockWasTaken = false;
try {
    System.Threading.Monitor.Enter(x, ref __lockWasTaken);
    ...
}
finally {
    if (__lockWasTaken) System.Threading.Monitor.Exit(x);
}

sauf que x n'est évalué qu'une seule fois.