Ich frage mich über eine ausfallsichere Möglichkeit, Monitor.TryEnter aufzurufen. Die Dokumentation zeigt es wie folgt aus:So rufen Sie Monitor.TryEnter auf
if (Monitor.TryEnter(lockObj)) {
try {
// The critical section.
}
finally {
// Ensure that the lock is released.
Monitor.Exit(lockObj);
}
}
Da dies die ‚offizielle‘ Weg, es zu nennen, zögere ich, etwas anderes zu tun. Aber ich mit diesem Code nicht sehr wohl fühlen: Angenommen, wir eine Threadabort wie diese:
if (Monitor.TryEnter(lockObj)) {
// *** ThreadAbortException happens exactly here
try {
[...]
}
finally { [...] }
}
Heißt das Verlass mich nicht mit einer Sperre, die nie freigegeben wird?
Warum nicht stattdessen 'lock (lockObj) {...}' 'verwenden? Außerdem ist ThreadAbortException in der Regel kein Problem, da der Prozess/die Anwendungsdomäne sowieso abgerissen wird. –
@Lasse: Sperre erlaubt mir nicht, etwas anderes zu tun, wenn das Schloss bereits vergeben ist. Die threadAbortException tritt nicht nur auf, wenn der Prozess abgebrochen wird, es gibt mehrere Möglichkeiten, einen Thread zu beenden. –