Ich muss einen so genannten Worker-Thread informieren, um die Arbeit bei der nächsten verfügbaren Opportunity zu beenden. Derzeit bin ich mit etwas wie folgt aus:Optionen zum Unterbrechen eines Threads
public void Run()
{
while (!StopRequested)
DoWork();
}
Die Sorge, die ich habe ist, dass StopRequested auf einem anderen Thread auf True gesetzt wird. Ist das sicher? Ich weiß, dass ich einen Boolean nicht sperren kann. Vielleicht gibt es eine andere Möglichkeit, einem Thread mitzuteilen, dass ein Stopp erforderlich ist. Zum Beispiel würde ich gerne überprüfen Thread.CurrentThread.ThreadState == ThreadState.StopRequested
, aber es ist nicht klar, wie ich den Thread-Status als solcher einstellen kann.
Warum können Sie einen booleschen Wert nicht sperren? Es wird allgemein als gute Praxis angesehen, ein separates "Objekt" für irgendwelche Schlösser zu erzeugen. –
Ich kann das Bool nicht sperren, weil es ein Werttyp ist - ich könnte ein sogenanntes Sync-Objekt für keinen anderen Zweck erzeugen, als es zu sperren, wenn ich das Bool-Flag bekomme/setze --- aber es scheint mir, dass es sperrt auf einem Bool sollte sicher sein, und zumindest Reed Copsey stimmt zu –
Ja, um einen Bool zu sperren sollte sicher sein. Kooperative Stornierung. Der Backgroundworker unterstützt ein ähnliches Konzept, wenn es für die von Ihnen ausgeführte Aufgabe geeignet ist. –