2012-10-23 13 views
7

Consideriamo questo codice:Abbiamo sempre bisogno di usare una parola chiave asincrona?

public async Task TheBestMethodEver1() 
{ 
// code skipped 
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal,() => 
{ 
    // code skipped 
}); 

}

public Task TheBestMethodEver2() 
{ 
    // code skipped 
    return Dispatcher.RunAsync(CoreDispatcherPriority.Normal,() => 
    { 
    // code skipped 
    }).AsTask(); 
} 

Uno di questi metodi possono essere chiamati come:

await TheBestMethodEverX(); 

Qual è la differenza tra questi due metodi e perché dovrei usare il primo di solito?

risposta

2

Qual è la differenza tra questi due metodi e perché dovrei usare il primo di solito?

Il primo ha un computer di stato generato dal compilatore e crea ulteriore garbage nell'heap. Pertanto è preferibile lo secondo.

Per ulteriori informazioni, guarda il classico video Zen of Async.

0

Se l'unica attesa è come ultima dichiarazione (e si è in attesa di un'attività, a differenza di qualche altro oggetto attendibile), è possibile anche saltarla e solo restituire l'attività. È facile aggiungere il modificatore asincrono, qualora fosse necessario in futuro.

+0

Naturalmente, posso implementare qualsiasi metodo, ma questa è una domanda ideologica. Qual è il modo preferito e perché? Qual è la migliore pratica? –

+0

@ A-studente: la risposta a cui stai rispondendo suggerisce che il tuo 'attendi' è ridondante e può essere saltato. La ridondanza non è una buona ragione per preferire questa soluzione? –

Problemi correlati