BEARBEITEN
Ich habe den Titel der Frage geändert, um das Problem wiederzugeben, das ich hatte, aber auch eine Antwort darauf, wie man das leicht erreichen kann.
Ich versuche, die 2. Methode so zu machen, dass Task<TResult>
anstelle von Task
wie in der ersten Methode zurückgegeben wird, aber ich bekomme eine Kaskade von Fehlern als Folge davon, es zu reparieren.
return
vor await body(partition.Current);
hinzugefügt
return null
unterhalb von Task.Run
in Task.Run<TResult>
, aber ohne Erfolg. Wie kann ich es beheben?
Die erste Methode kommt von Ссылка , die zweite Methode ist die Überladung, die ich versuche zu erstellen.
%Vor%Anwendungsbeispiel:
Mit dieser Methode möchte ich mehrere Dateien parallel und asynchron herunterladen:
%Vor%Ich habe es gelöst und es hier gepostet, könnte jedem helfen, der das gleiche Problem hat.
Mein erstes Bedürfnis war ein kleiner Helfer, der Bilder schnell herunterladen würde, aber auch die Verbindung einfach abbricht, wenn der Server nicht schnell antwortet, all dies parallel und asynchron .
Dieser Helfer gibt Ihnen ein Tupel zurück, das den Remote-Pfad, den lokalen Pfad und die Ausnahme enthält, falls eine aufgetreten ist; also ziemlich nützlich, denn es ist immer gut zu wissen, warum fehlerhafte Downloads fehlerhaft sind. Ich denke, ich habe keine der Situationen vergessen, die bei einem Download auftreten können, aber Sie können es gerne kommentieren.
Sie können einfach DownloadFileTaskAsync
selbst verwenden oder den Helfer ForEachAsync
für parallele und asynchrone Downloads verwenden.
Code mit einem Beispiel zur Verwendung:
%Vor% Ich habe die Signatur von ForEachAsync
nicht geändert, um das Niveau der Parallelität zu wählen. Ich lasse es nach Ihren Wünschen anpassen.
Ausgabebeispiel:
%Vor%Was früher bis zu einer Minute dauerte, dauert kaum 10 Sekunden für das gleiche Ergebnis:)
Und vielen Dank an den Autor dieser 2 Beiträge:
Tags und Links c# async-await task foreach