2015-07-22 3 views
6

Ich habe mehrere Aufgaben, die den gleichen Objekttyp, den ich aufrufen möchte, unter Verwendung Task.WhenAll(new[]{t1,t2,t3}); zurückgeben und die Ergebnisse lesen. Ergebnis von Task.WhenAll erhalten

Wenn ich versuche, mit

Task<List<string>> all = await Task.WhenAll(new Task[] { t, t2 }).ConfigureAwait(false); 

ich einen Compiler-Fehler

nicht implizit Typ konvertieren kann 'ungültig' zu 'System.Threading.Tasks.Task<System.Collections.Generic.List<string>>

beide Aufgaben fordern ähnliches Verfahren wie die diese .

private Task<List<string>> GetFiles(string path) 
{ 
    files = new List<string>(); 
    return Task.Run(() => 
    { 
     //remove for brevity 
     return files; 
    }); 
} 
+0

Können Sie bitte klären, was Teil von MSDN Probe für [WhenAll] (https://msdn.microsoft.com/en-us/library/hh194766%28v=vs.110%29.aspx) nicht klar? Würde die Frage leichter beantworten lassen. –

+0

Eigentlich ist keiner der Artikel nicht klar. Was nicht klar ist, ist, woher diese Leere kommt. – user3373870

+0

Ich sehe - wie Mike Hixson wies darauf hin, Sie haben eine Liste von 'Task' (Aufgabe, die keinen Wert zurückgibt) anstelle von' Task '- daher erwarten Ergebnisse in' void'. Normalerweise geben Sie den Typ nicht einfach mit der Shortcut-Array-Syntax an, um solche Probleme zu vermeiden - 'ask.WhenAll (new [] {t, t2}) ...'. oder verwenden Sie eine ordnungsgemäß getippte Liste/ein Array von Aufgaben, wie im MSDN-Beispiel gezeigt: 'var tasks = new List >();'. –

Antwort

5

Sieht aus wie Sie die Überladung von WaitAll() verwenden, die keinen Wert zurückgibt. Wenn Sie die folgenden Änderungen vornehmen, sollte es funktionieren.

List<string>[] all = await Task.WhenAll(new Task<List<string>>[] { t, t2 }) 
           .ConfigureAwait(false); 
+3

Oder einfach 'List [] alle = warten Task.WhenAll (t, t2) .ConfigureAwait (false);' –

2

Der Rückgabetyp WhenAll ist eine Aufgabe Ergebnistyp, der ist ein Array aus den Ergebnistyp individuellen Aufgaben, in Ihrem Fall Task<List<string>[]>

Wenn in einem await Ausdruck verwendete, wird die Aufgabe „ausgepackt wird "in seinen Ergebnistyp, was bedeutet, dass der Typ Ihrer" alle "Variable sollte List<string>[]