Wie erhalte ich eine Benachrichtigung, dass eine System.Threading.Tasks.Task abgeschlossen wurde?

Ich ersetze derzeit einige selbst erstellte Aufgabenfunktionen durch eine neue Implementierung mit der neuen System.Threading.Tasks-Funktion in .net 4.

Ich habe jedoch ein kleines Problem, und obwohl ich mir Lösungen überlegen kann, möchte ich einen Rat geben, welche im Allgemeinen die beste Methode ist und ob mir irgendwo ein Trick fehlt.

Was ich brauche, ist, dass ein beliebiger Prozess in der Lage ist, eine Aufgabe zu starten, aber dann weitermacht und nicht auf den Abschluss der Aufgabe wartet. Kein Problem, aber wenn ich dann mit dem Ergebnis einer Aufgabe etwas anfangen muss, bin ich mir nicht ganz sicher, wie ich es am besten machen soll.

Alle Beispiele, die ich gesehen habe, verwenden entweder Wait () für die Aufgabe, bis sie abgeschlossen ist, oder verweisen auf den Parameter Result für die Aufgabe. Beide blockieren den Thread, der die Aufgabe gestartet hat, was ich nicht will.

Einige Lösungen, an die ich gedacht habe:

Erstellen Sie einen neuen Thread und starten Sie die entsprechende Task. Verwenden Sie dann Wait () oder .Result, um den neuen Thread zu blockieren und das Ergebnis irgendwie wieder mit dem Aufrufer zu synchronisieren, möglicherweise mit der Abfrage des Parameters IsCompleted für die Tasks.

Haben Sie eine Aufgabe "Benachrichtigen abgeschlossen", die ich nach Abschluss der auszuführenden Aufgabe starten kann, die dann ein statisches Ereignis oder etwas anderes auslöst.

Leiten Sie einen Delegaten in die Eingabe der Aufgabe ein und rufen Sie diese auf, um zu benachrichtigen, dass die Aufgabe abgeschlossen ist.

Ich kann an alle denken oder für und wider, aber ich mag es besonders nicht, explizit einen neuen Thread erstellen zu müssen, um die Aufgabe zu starten, wenn eines der Ziele darin besteht, die Task-Klasse überhaupt zu verwenden ist von der direkten Thread-Nutzung abzubrechen.

Hast du irgendwelche Gedanken über den besten Weg? Vermisse ich etwas Einfaches? Wäre ein "Abgeschlossen" -Event zu viel verlangt :)? (Sicher gibt es einen guten Grund, warum es keinen gibt!)

Antworten auf die Frage(8)

Ihre Antwort auf die Frage