Zum Beispiel stellt sagen wir, ich bin ein Verfahren mit den unten Signatur (C# 4 also keine async keywords) zu schreiben:Erstellen einer Aufgabe, die eine Reihe von Weiter Aufgaben
public Task Refresh();
Es ist eine Methode aufrufen wird (die auch eine Task
) zurückgibt, um die Kommunikationsarbeit auszuführen, und dann eine Taskfortsetzung auszuführen, um einige interne Zustände basierend auf den abgerufenen Daten zu aktualisieren. z:
public Task Refresh()
{
Task<MyData> commsTask = datasource.LoadData();
Task handleDataTask = commsTask.ContinueWith(HandleNewData);
return ?;
}
Wenn ich die handleDataTask
Return.Spuren es ist Vollendungszustand korrekt das Ergebnis der Operation ‚Aktualisieren‘, aber es berichten nicht richtig es Zustand gestartet wird.
Ich kann beide in einem neuen Task.Factory.StartNew
umhüllen und sie als untergeordnete Aufgaben erstellen, aber es scheint verschwenderisch, einen neuen Thread zu spoolen, nur um einige Task-Fortsetzungen zu verknüpfen.
Sicherlich gibt es eine ordentlich effiziente Möglichkeit, dies mit dem TPL zu tun?
Warum interessiert dich der Staat? – svick
Damit die Implementierung mit der impliziten Dokumentation der Methodensignatur übereinstimmt? Ich weiß es nicht, frage die Verbraucher nach meiner Methode. Es gibt wahrscheinlich 100s von möglichen Verwendungen für die 'Task.Status'-Eigenschaft, alles was ich weiß ist, dass meine Methode eine 'Task' zurückgeben sollte, die korrekt ihrer Dokumentation folgt. – Tyson