Come sperimentare il nuovo async & Attendere le funzionalità di 4.5 Voglio cancellare alcune confusioni prima di andare oltre. Ho letto diversi articoli e anche diverse domande su SO e mi aiuta a capire come funziona Async e Await. Cercherò solo di mettere qui la mia comprensione e confusione e apprezzerò se qualcuno codice educare me e altre persone che stanno cercando le stesse cose. Ne parlo in parole molto semplici.Async attende poche confusioni
Quindi, Async viene utilizzato in modo che il compilatore sappia che il metodo contrassegnato da Async contiene l'operazione In attesa (operazione lunga). L'ultimo framework contiene diversi nuovi metodi incorporati per le operazioni asincrone.
Async incorporato funziona come connection.OpenAsync, ExecuteScalarAsync ecc. Vengono utilizzati con la parola chiave Await. Non conosco il funzionamento interno di questi metodi asincroni, ma la mia forte ipotesi è che sotto il cofano stanno usando Task.
Posso fare come regola generale che Await sarà con qualsiasi metodo che implementa Task. Quindi, se ho bisogno di creare il mio metodo che sta eseguendo un'operazione lunga, lo creerò come Task e quando sarà chiamato userò Await Keyword con esso?
La seconda cosa più importante è che la regola generale è creare un metodo Async o crearlo come compito. Ad esempio,
public void SampleMain()
{
for (int i = 1; i <= 100; i++)
{
DataTable dt = ReadData(int id);
}
}
public DataTable ReadData(int id)
{
DataTable resultDT = new DataTable();
DataTable dt1 = new DataTable();
// Do Operation to Fill DataTable from first connection string
adapter.Fill(dt1);
DataTable dt2 = new DataTable();
// Do Operation to Fill DataTable from first connection string
adapter.Fill(dt2);
// Code for combining datatable and returning the resulting datatable
// Combine DataTables
return resultDT;
}
public string GetPrimaryConnectionString()
{
// Retrieve connection string from some file io operations
return "some primary connection string";
}
public string GetSecondaryConnectionString()
{
// Retrieve connection string from some file io operations
return "some secondaryconnection string";
}
Ora questo è uno scenario molto semplice che ho creato in base ad alcune applicazioni del mondo reale in cui ho lavorato in passato. Quindi mi stavo chiedendo come rendere questo intero processo Async.
Devo rendere GetPrimaryConnectionString e GetSecondaryConnectionString come attività e attenderli in ReadData. ReadData sarà anche un compito? Come chiamare ReadData nella funzione SampleMain?
Un altro modo potrebbe essere quello di creare un'attività per ReadData in SampleMain ed eseguire tale attività e saltare la conversione di altri metodi come Attività. E 'questo il buon approccio? Sarà veramente Asincrono?
Esempio di cosa intendi "creare un metodo come un'attività" sarebbe più utile di un codice sincrono un po 'casuale che hai aggiunto al post. –
@Alexei Levenkov Grazie per la risposta. Non capisco il tuo commento completamente. Quello che ho presentato è uno scenario campione di esempio con meno codice possibile per far capire ai lettori come rendere questo intero processo Asincrono usando Async e Await. Non è affatto casuale. –
@ M.kazem Akhgary. Tutto apposto. Quindi non c'è bisogno di cambiare i metodi GetPrimaryConnectionString e GetSecondaryConenctionString. Se faccio solo il ReadData come Async tutto questo processo sarà Asincrono? –