può sostituire completamente il vecchio modo di utilizzare i thread?
No. Un thread può fare molte altre cose utili. Await è specificamente progettato per gestire qualcosa che richiede tempo, in genere una richiesta di I/O. Che tradizionalmente era fatto con un callback quando la richiesta di I/O era completa. Scrivere codice che si basa su questi callback è abbastanza difficile, attenderlo notevolmente lo semplifica.
in grado di fare ciò che una Thread può mai fare in modo asincrono?
Approssimativo. Attendere si occupa solo di gestire il ritardo, altrimenti non fa nulla che un thread faccia. L'attesa espressione, ciò che è a destra della parola chiave Attendere, è ciò che ottiene il lavoro svolto. Idealmente non usa affatto un thread, pubblica una richiesta di driver e una volta che il driver ha completato il trasferimento dei dati, genera un callback di notifica di completamento. Il networking è di gran lunga l'uso più comune, le latenze di centinaia di millisecondi sono comuni e un inevitabile effetto collaterale dei servizi che si spostano dal desktop o da una LAN verso il "cloud". L'utilizzo di tali servizi in modo sincrono renderebbe un'interfaccia utente abbastanza insensibile.
solo può essere utilizzato con alcuni metodi come WebClient.DownloadStringAsync
No. Si può utilizzare con qualsiasi metodo che restituisce un Task. I metodi XxxxAsync() sono solo precotti nel framework .NET per operazioni comuni che richiedono tempo. Come scaricare dati da un server web.
fonte
2013-03-01 02:34:02
Thread e Async/Attendi sono funzioni non correlate. Puoi combinarli, ma non devi. – dtb
Ho pensato che Async/Await stia facendo la stessa cosa di 'new Thread (() => {Some Work}). Start();' sta facendo?! non è vero? –
No. La tua ipotesi non è corretta. Si potrebbe pensare a [Task.Run] (http://msdn.microsoft.com/en-us/library/hh195051.aspx) (TPL), che spesso è combinato con Async/Attesa, ma è anche non correlato e non non deve essere usato con esso. – dtb