Ich stelle mir etwas dieser Art vor:
bool lockActive = False;
public void OnStartClick()
{
if (lockActive)
{
return;
}
lockActive = true;
// Do something in critical section
lockActive = false;
}
Da OnStartClick mehrfach gleichzeitig ausgeführt werden kann (Siehe unten warum), muss das Locken atomar passieren.
Ein richtiges (async-)Lock kann ich nach meinem Verständnis aber nicht verwenden, da die Threads warten würden, statt zu returnen.
Wie kann ich das umsetzen?
( Wozu ich das brauche: )
Task A (UI) startet Task B beim Knopfdruck.
Zum erneuten Starten muss A erst B beenden. Dazu nutzt A ein Cancel-Token und wartet auf Beenden von B.
Das Warten auf B muss allerdings soweit ich weiß asynchron passieren, da sonst außer A auch B blockiert wird, da sie im gleichen Threadpool sind -> Deadlock.
Dadurch, dass asynchron gewartet wird, kann es aber passieren, dass durch mehrfaches Drücken mehrere Tasks auf das Beenden warten. Ich möchte aber, dass maximal einer wartet.
Das könnte ich umgehen, indem ich Threads außerhalb des Threadpools verwende.
Geht es aber vielleicht auch so?