2015-07-22 16 views
6

Ho più attività che restituiscono lo stesso tipo di oggetto che desidero chiamare utilizzando Task.WhenAll(new[]{t1,t2,t3}); e leggere i risultati.Ottenere risultato da Task.WhenAll

Quando provo utilizza

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

ottengo un errore di compilazione

Impossibile convertire implicitamente il tipo 'vuoto' di 'System.Threading.Tasks.Task<System.Collections.Generic.List<string>>

entrambi i compiti vengono metodo simile chiamando il presente .

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

Potete per favore chiarire quale parte del campione di MSDN per [WhenAll] (https://msdn.microsoft.com/en-us/library/hh194766%28v=vs.110%29.aspx) non è chiaro? Sarebbe più facile rispondere alla domanda. –

+0

In realtà nessuno dell'articolo è chiaro. Ciò che non è chiaro è da dove viene questo vuoto. – user3373870

+0

Vedo - come ha sottolineato Mike Hixson, l'elenco di 'Task' (attività che non restituisce valore) invece di' Task '- quindi attendiamo risultati in' void'. Normalmente non si specifica il tipo usando la sintassi dell'array di scelta rapida per evitare tali problemi - 'ask.WhenAll (new [] {t, t2}) ...'. oppure utilizzare una lista/serie di compiti tipicamente corretti come mostrato nell'esempio MSDN - 'var tasks = new List >();'. –

risposta

5

Sembra che si stia utilizzando il sovraccarico di WaitAll() che non restituisce un valore. Se apporti le seguenti modifiche, dovrebbe funzionare.

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

Oppure solo "Elenco [] all = attende Task.WhenAll (t, t2) .ConfigureAwait (false);' –

2

Il tipo di ritorno di WhenAll è un compito cui risultato tipo è un array di tipo di risultato dei singoli compiti, nel tuo caso Task<List<string>[]>

Quando utilizzato in un'espressione attendono, il compito sarà "da scartare "nel suo tipo di risultato, il tipo di variabile" tutto "dovrebbe essere List<string>[]

Problemi correlati