Dato il seguente codice, ho alcune domande su best practice:Qual è la procedura migliore per riempire un DataSet o DataTable in modo asincrono in ASP.NET?
string connectionString = @"Server=(local)\sqlexpress; Database=master; Integrated Security=true;";
using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlDataAdapter dataAdapter = new SqlDataAdapter("select * from information_schema.columns", connection))
{
await connection.OpenAsync();
DataTable dataTable = new DataTable();
await Task.Run(() => dataAdapter.Fill(dataTable));
return dataTable;
}
}
che ho visto diversi esempi che avvolgono l'intero blocco di codice in una chiamata Task.Run(), ma io non sono certo se è meglio che chiamare Task.Run() solo per il metodo DataAdapter.Fill(), che si sente più flessibile e specifico (solo usando Attendere nelle attività asincrone).
L'approccio di chiamare Task.Run() sul metodo Fill() è migliore del wrapping dell'intero blocco di codice?
C'è qualche effetto collaterale negativo nel chiamare Fill() in Task.Run()? Sto pensando a qualcosa sulla falsariga di perdere stack di chiamate e/o informazioni di eccezione se Fill() ha un errore.
C'è un modo migliore per scrivere questo in ASP.NET?
Perché non inserire * tutto * di quel codice all'interno di un metodo asincrono? Cioè, sposta l'attività per comprendere l'intero ciclo di vita della connessione SQL, compreso il riempimento del DataTable. – user2864740
È questo ASP.NET o GUI? – usr
@usr, stavo assumendo ASP.NET; c'è una grande differenza qui? –