У меня есть несколько хранимых процедур, которые ВСТАВЛЯЮТ или ОБНОВЛЯЮТ в базу данных в моем приложении веб-форм ASP.NET.Я хочу, чтобы эти запросы выполнялись, но я не хочу, чтобы пользовательский интерфейс или выполнение страницы ожидали их завершения.Они не занимают много времени (намного меньше секунды), но это секунда, в течение которой пользователь должен ждать загрузки страницы.
Я обычно смотрю на вставку журнала или истории в таблицу.Просмотр страницы пользователя не зависит от выполнения или результатов запроса.
Я пытаюсь использовать асинхронные методы .NET, такие как ExecuteNonQueryAsync ().Но я думаю, что я понял это неправильно концептуально.ExecuteNonQueryAsync (), по-видимому, предназначен для параллельного запуска двух или более длительных операций с базами данных и блокировки пользовательского интерфейса до тех пор, пока они не будут завершены.
private async Task<string> DoTransaction()
{
string value = "";
using (SqlConnection objCS = DB.AdminNET())
{
await objCS.OpenAsync();
using (SqlTransaction t = objCS.BeginTransaction())
using (SqlCommand objCommand = new SqlCommand("WAITFOR DELAY '00:00:05'; EXEC logtiming @line", objCS, t))
{
try
{
objCommand.Parameters.Add("@line", SqlDbType.VarChar).Value = "log me";
await objCommand.ExecuteNonQueryAsync();
}
catch
{
t.Rollback();
throw;
}
t.Commit();
value = "done";
}
}
return value;
}
protected async void Page_Load(object sender, EventArgs e)
{
await DoTransaction(g);
}
Этот код вставит мои тестовые данные после введенной задержки.Тем не менее, он удерживает весь ответ страницы пользователю до тех пор, пока не закончится задержка.В идеале я хотел бы, чтобы страница немедленно возвращалась пользователю, а через пять секунд я увижу свои результаты в таблице.Является ли ExecuteNonQueryAsync () неправильным инструментом для этого?Или я могу внести некоторые изменения, которые я еще не нашел, например."не ждите"?