Ich möchte Reentrancy für große Menge von Methoden verbieten.Hat das Framework dedizierte API, um Reentrancy zu erkennen?
für die einzelne Methode funktioniert diesen Code:
bool _isInMyMethod;
void MyMethod()
{
if (_isInMethod)
throw new ReentrancyException();
_isInMethod = true;
try
{
...do something...
}
finally
{
_isInMethod = false;
}
}
Dies ist mühsam es für jede Methode zu tun.
Also habe ich verwendet Stacktrace-Klasse:
public static void ThrowIfReentrant()
{
var stackTrace = new StackTrace(false);
var frames = stackTrace.GetFrames();
var callingMethod = frames[1].GetMethod();
if (frames.Skip(2).Any(frame => EqualityComparer<MethodBase>.Default.Equals(callingMethod,frame.GetMethod())))
throw new ReentrancyException();
}
Es funktioniert gut, aber sieht eher wie ein Hack.
Hat .NET Framework spezielle API zur Erkennung von Reentrancy?
Warum interessieren Sie sich für Reentrancy? –
Code schreiben, bei dem der Wiedereintritt erwartet wird, dann können Sie ihn erneut eingeben. – Jodrell
Legacy-Code. Wir haben Tonnen von Abhängigkeiten zwischen Fenstern. Eine einzelne Aktion kann viele unnötige Wiederholungskaskaden von Ereignissen, Aktualisierungen und Datenbankanforderungen verursachen. Und es ist schwer, jede solche Schleife mit den Augen zu erkennen. –