Asynchrone lambda-Ausdruck mit warten Renditen Aufgabe?

Ich habe den folgenden code:

            //Get all of the files from the local storage directory.
        var files = await folder.GetFilesAsync();

        //Map each file to a stream corresponding to that file.
        var streams = files.Select(async f => { return await f.OpenStreamForWriteAsync(); });

Ich würde erwarten, dass streams Typ IEnumerable<Stream> aber in der Tat ist es der IEnumberable<Task<Stream>>, das ist, was ich zu erwarten haben, hatte ich die weggelassen await-Schlüsselwort. Der Rückgabetyp OpenStreamForWriteAsync ist Task<Stream> — sicherlich erwartet es sollte einen Stream?

So, warum ist der return await-Anweisung Rückkehr eine Aufgabe?

Vielen Dank für Ihre Hilfe.

async-Methoden immer wieder Task<T> oder Task. Wählen Sie selbst kümmert sich nicht um die Rückgabe geben. Damit it-Projekte eine zählbare Aufgabe, da die select-lambda ist async. Man könnte die Iteration über Ihre Sammlung und warten auf den Stream.
Gut, man kann schreiben "async void" - Methode, die ist, was ich vermutete, war hier passiert. Wie kann ich es beheben?
OK werde ich mal versuchen.
Was vscjones wohl gemeint ist, dass jederzeit eine nicht-async Methode, die void zurückgibt und verwandeln Sie es in eine async Methode solltest du ändern, es ist Rückgabetyp von void zu Task, weil Task ist eine Möglichkeit für den Anrufer, zu wissen, wenn es fertig ist, aber gibt es nicht ein Ergebnis. Rückkehr void nur bedeutet, der Anrufer kann nicht einmal wissen, Wann es endet.
why is the return await statement returning a Task? I +1 ' ed Servy Antwort, aber um es einfach zu sagen: await packt ein Task<T> zu einem T, und async umschließt die T zurück in Task<T>.

InformationsquelleAutor Matthew H | 2012-12-20

Schreibe einen Kommentar