Dopo due domande e molta confusione - mi chiedo se finalmente ho capito bene. Questa è la mia comprensione:async/await - La comprensione è corretta?
async/await
serve un solo scopo - per consentire il codice da eseguire dopo un già compito asincrona è finito. ad es.
async Task CallerMethod()
{
await AsyncMethod();
AnotherMethod();
}
permette AnotherMethod
da eseguire dopo la asincrono AsyncMethod
è finito anziché immediatamente dopo AsyncMethod
è avviato.
async/attendi MAI rende nulla, in modo asincrono,. Non inizia un thread separato (a meno che il metodo atteso lo faccia comunque, ovviamente), ecc.
La mia comprensione (finalmente) è corretta?
sì, suona bene, ma tieni presente che puoi finire su un altro thread anche se "AsyncMethod' non genera thread - la tua callback può essere generata in qualsiasi thread-thread – Carsten
@Carsten Grazie. Supponendo che per 'callback' tu intendi' AnotherMethod(); '- questo avrebbe un'implicazione molto importante - che non potrei aggiornare l'interfaccia utente da esso - è davvero vero? – ispiro
No, è possibile aggiornare in modo sicuro l'interfaccia utente da esso. La ragione di ciò è che ogni Thread ha un 'SynchronizationContext' che viene usato dal codice generato da async/attende di inviare il callback che termina il metodo asincrono. Nel caso di WPF (ad esempio), quella classe è un 'DispatcherSynchronizationContext' che si assicura di richiamare il metodo sul thread Dispatcher se necessario. C'è una classe simile per WinForms. –