Учитывая следующий код, у меня есть несколько вопросов о лучших практиках:
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;
}
}
Я видел несколько примеров, которые переносят весь блок кода в вызов Task.Run(), но я не уверен, что это лучше, чем вызов Task.Run() только для метода DataAdapter.Fill(), который чувствует себя более гибким и конкретным (только используя ожидание асинхронных задач).
Является ли метод вызова Task.Run() метода Fill() лучше, чем обертывание всего кода кода?
Есть ли какие-либо негативные побочные эффекты для вызова Fill() в Task.Run()? Я думаю о чем-то вроде потери стека вызовов и/или информации об исключении, если Fill() имеет ошибку.
Есть ли лучший способ написать это в ASP.NET?