Wie löst man das AttachAsync einer DownloadOperation nicht sofort?

9

Bei Verwendung der Hintergrundübertragungs-API müssen wir die aktuellen Datenübertragungen durchlaufen, um sie erneut zu starten, nachdem die App nach einer Beendigung neu gestartet wurde (d. h. Systemabschaltung). Um Fortschrittsinformationen zu erhalten und die Datenübertragungen abbrechen zu können, müssen sie mit AttachAsync verbunden werden.

Mein Problem ist, dass AttachAsync nur zurückkehrt, wenn die Datenübertragung beendet ist. Das ist in manchen Szenarien sinnvoll. Bei mehreren Datenübertragungen wird die nächste Übertragung in der Liste jedoch erst gestartet, wenn die aktuell angehängte Übertragung beendet ist. Meine Lösung für dieses Problem bestand darin, die Aufgabe zu behandeln, die AttachAsync (). AsTask () gibt auf die klassische Weise zurück (nicht verwenden erwarten, aber Fortsetzungen):

%Vor%

Es funktioniert irgendwie (im eigentlichen Code füge ich die Downloads zu einer ListBox hinzu). Die Schleife durchläuft alle Downloads und führt StartAsync aus. Aber die Downloads werden nicht alle gleichzeitig gestartet. Es läuft immer nur einer und erst wenn der nächste beendet ist, wird fortgefahren.

Irgendeine Lösung für dieses Problem?

    
Jürgen Bayer 19.12.2012, 00:58
quelle

1 Antwort

3

Der ganze Sinn von Task besteht darin, dass Sie die Option von parallelen Operationen haben. Wenn Sie await haben, dann sagen Sie dem Code, die Operationen zu serialisieren; Wenn Sie nicht warten, dann sagen Sie dem Code parallelisieren.

Sie können jede Download-Aufgabe zu einer Liste hinzufügen und den Code parallelisieren. Sie können dann warten, bis Aufgaben nacheinander abgeschlossen werden.

Wie wäre es mit etwas wie:

%Vor%     
chue x 28.12.2012 00:13
quelle