Ho una domanda riguardante l'attesa/asincronizzazione e l'utilizzo di metodi asincroni in scenari leggermente diversi dal previsto, ad esempio non direttamente in attesa. Per esempio, diciamo che ho due routine che ho bisogno di completare in parallelo, dove entrambi sono metodi asincroni (sono in attesa dentro). Sto usando await TAsk.WhenAll(...)
che a sua volta si aspetta una sorta di elenco di attività da attendere. Quello che ho fatto è qualcosa di simile:Attendere/asincrare e uscire dalla casella
await Task.WhenAll(new Task[]
{
Task.Run(async() => await internalLoadAllEmailTargets()),
Task.Run(async() => await internalEnumerateInvoices())
});
Questo sembra eccessivamente elaborato per me, nel senso che sto creando compiti asincroni il cui unico scopo è quello di richiamare un altro compito. Non posso semplicemente usare le attività che vengono restituite dal motore di stato del metodo asincrono? Eppure, io non riuscendo a farlo dal momento che il compilatore tratta ogni menzione diretta di metodo asincrono come punto di invocazione:
// this doesn't seem to work ok
await Task.WhenAll(new Task[]
{
internalLoadAllEmailTargets(),
internalEnumerateInvoices()
});
Se la sua in questo modo, sembra che le chiamate in modo sincrono uno dopo l'altro, e se ho posto attendo di fronte di metodi, non è più un compito. C'è qualche regola su come i metodi asincroni dovrebbero essere gestiti fuori dalla pianura attendono?
Ah, ok, questo in realtà ha senso. Cosa succede se ho 'async Task', quindi ho bisogno di raccogliere i risultati di più chiamate di metodi asincroni? –
mmix
@mmix: se entrambe le attività sono dello stesso tipo (ad esempio, "Attività"), allora puoi fare "Qualcosa [] risultati = attendere Task.WhenAll (...);" –
Bene, non lo sono. Immagino di non andare in giro per i delegati. – mmix