Ich versuche, von dem ereignisbasierten asynchronen Muster überzugehen, wo ich laufende Methoden mit eindeutigen IDs und dem asynoperationmanager verfolgt habe.
Da dies jetzt aus Windows 8 Apps gelöscht wurde, versuche ich mit Async / Await einen ähnlichen Effekt zu erzielen, kann aber nicht genau herausfinden, wie.
Was ich versuche zu erreichen, ist etwas wie
Der Teil, mit dem ich Probleme habe, ist herauszufinden, ob die Methode läuft. Ich habe versucht, eine Aufgabe zu erstellen und den Status von sowohl dem als auch dem Status der asynchronen Methode zu betrachten, aber sie scheinen nicht der richtige Ort zu sein. Danke
UPDATE: Dies ist der aktuelle Code, den ich in .net 4 verwende, um das gleiche Ergebnis zu erzielen. _updateMetaDataAsync ist eine Klasse, die auf dem ereignisbasierten asynchronen Muster basiert.
%Vor% async
/ await
selbst soll zum Erstellen sequenzieller Operationen verwendet werden, die asynchron vom UI-Thread ausgeführt werden. Sie können dafür sorgen, dass parallele Operationen ausgeführt werden, aber die Operationen "verbinden" sich in der Regel mit einer Art Ergebnis zum UI-Thread zurück. (Es gibt auch die Möglichkeit, Arten von asynchronen Operationen mit await
zu "feuern und zu vergessen", aber das wird nicht empfohlen). d. h. es ist nichts in async
/ await
enthalten, um Fortschrittsberichte zu unterstützen.
Sie können einen Fortschritt außerhalb des Codes erzielen, indem Sie async
/ await
; aber Sie müssen neue Fortschrittsschnittstellen wie IProgress<T>
verwenden. Weitere Informationen zur Fortschrittsberichterstattung mit async
/ await
finden Sie unter Ссылка . Zu diesem Zweck sollte nur ein IProgress
-Delegat statt eines Progress
-Ereignisses aufgerufen werden.
Wenn Sie eine Task
verwenden, die Sie erstellt haben, können Sie die Status Eigenschaft (oder sehen Sie sich an Task.IsCompleted wenn die Fertigstellung der einzige Status ist, an dem Sie interessiert sind.
Das heißt, await
wird nicht zurückgeben, bis die Operation abgeschlossen ist, eine Ausnahme auslöst oder abbricht. Sie können grundsätzlich davon ausgehen, dass Ihre Aufgabe nicht abgeschlossen ist, wenn Sie noch auf "Warten" warten.
Der zusätzliche Bonus ist, dass Sie sehen können, wie viele Gegenstände in der Schlange sitzen!