C# - Methoden 'abschliessen'

Tagchen,

Folgendes Problem:
Ich habe eine Methode, die innerhalb eines Threading Gerüsts theoretisch durchaus mehrer Male gleichzeitig aufgerufen werden kann.
Das soll sie aber nicht.
Wenn die Methode ein zweites Mal aufgerufen wird, soll sie sofort wieder verlassen werden.
derzeit mache ich das mittels einer Boolschen Variablen, die während des Methodeneintritts auf true gesetzt wird

if (is_in_methodXY) return;

Wenn es sich aber um viele Methoden handelt, für die obiger Fall eintreten kann, wird es wegen der vielen extraVariablen schnell unübersichtlich.

Nun also meine frage:
gibt es in C# eine elegante Möglichkeit Methoden elegant und übersichtlich von einem Mehrfachzugriff auszuschliessen?

MfG
Christoph

Eine Frage: Synchronisierst du den Zugriff auf die Variable is_in_methodXY?
Sonnst du könntest ein Dictionary verwenden um zu überprüfen ob die Methode bereits ausgeführt wird. Als Key nimmst du den Namen der Methode.

Eine Frage: Synchronisierst du den Zugriff auf die Variable
is_in_methodXY?
Sonnst du könntest ein Dictionary
verwenden um zu überprüfen ob die Methode bereits ausgeführt
wird. Als Key nimmst du den Namen der Methode.

Den Zugriff brauche ich idR nicht zu synchronisieren, da es so abläuft und ein gleichzeitiger Aufruf recht unwahrscheinlich ist:

if (is_in_methodXY)
return;
is_in_methodXY = true;

is_in_methodXY = false;

Obige Methode kam mir auch in den Sinn. Dürfte auch nicht zu viel Overhead erzeugen.

dachte nur, dass es da was Ähnliches, wie das Methoden-lock gibt, nur, dass da nicht gewartet wird, sondern weitergesprungen.

MfG
Christoph

Den Zugriff brauche ich idR nicht zu synchronisieren, da es so
abläuft und ein gleichzeitiger Aufruf recht unwahrscheinlich
ist:

Das Ist wohl wieder ein Kandidat für die berühmten letzten Worte…

Hi!

Schau’ Dir mal das Schlüsselwort lock() an, das ist genau für solche Fälle da.

Gruß,
Martin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Den Zugriff brauche ich idR nicht zu synchronisieren, da es so
abläuft und ein gleichzeitiger Aufruf recht unwahrscheinlich
ist:

Das Ist wohl wieder ein Kandidat für die berühmten letzten
Worte…

Sagen wirs mal so… Durch die Threadsynchronisation ist es nicht möglich, dass eine Methode zweimal auf einmal aufgerufen wird, wohl jedoch mit einem Abstand von mindestens 300 ms.

Und das reicht aus, um auf Synchronisation verzichten zu können. Punkt.

Ende der Diskussion und ab zum eigentlichen Thema

soweit ich das verstanden hatte, wird bei einem lock nur gewartet, bis die Methode abgearbeitet ist, um diese dann noch einmal auszuführen.

Oder?

Denn so etwas wollte ich nicht.

Er soll gleich aus der Methode springen.

Sagen wirs mal so… Durch die Threadsynchronisation ist es
nicht möglich, dass eine Methode zweimal auf einmal aufgerufen
wird, wohl jedoch mit einem Abstand von mindestens 300 ms.

Und das reicht aus, um auf Synchronisation verzichten zu
können. Punkt.

Ende der Diskussion und ab zum eigentlichen Thema

Welche Threadsynchronisation menst du, du hast ja keine.
Aber bezüglich deiner Frage: Es gibt m.E. nach keine vorgefertigte Lösung. Ist auch ein eher seltenes Problem.

lg

Oh, ja, Du wolltest ja etwas anderes. Sorry, da habe ich wohl das Posting nicht genau gelesen.
Beim lock wird tatsächlich der zweite aufrufende Thread blockiert, bis der kritische Abschnitt wieder verlassen wurde.

Gruß,
Martin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]