Ciò che descrivi è noto come JavaScript Promises, in termini di programmazione generale sono chiamati Continuazioni . C # li supporta tramite le parole chiave Task Parallel Library e Async / Await.
Ecco come funziona, voglio chiamare un'operazione in modo asincrono. Se l'operazione è già dichiarata Async è semplice:
- Aggiungi asincrono alla tua funzione che chiama la funzione asincrona esistente
- Cambia il valore restituito in Attività (per vuoto) o Attività (per qualsiasi altro tipo T)
- Posiziona la parola chiave attende davanti alla chiamata a quella funzione asincrona. E segui quella chiamata con il resto della logica della mia funzione.
Ecco un esempio (tratto da MSDN Documenti su Async Await ).
// Three things to note in the signature:
// - The method has an async modifier.
// - The return type is Task or Task<T>. (See "Return Types" section.)
// Here, it is Task<int> because the return statement returns an integer.
// - The method name ends in "Async."
async Task<int> AccessTheWebAsync()
{
// You need to add a reference to System.Net.Http to declare client.
HttpClient client = new HttpClient();
// GetStringAsync returns a Task<string>. That means that when you await the
// task you'll get a string (urlContents).
// The await operator suspends AccessTheWebAsync.
// - AccessTheWebAsync can't continue until getStringTask is complete.
// - Meanwhile, control returns to the caller of AccessTheWebAsync.
// - Control resumes here when getStringTask is complete.
// - The await operator then retrieves the string result from getStringTask.
string urlContents = await client.GetStringAsync("http://www.microsoft.com");
// The return statement specifies an integer result.
// Any methods that are awaiting AccessTheWebAsync retrieve the length value.
return urlContents.Length;
}
La lettura dell'articolo collegato descriverà cosa sta accadendo in background.
Puoi anche eseguire esplicitamente le continue in C # usando l'operazione ContinueWith