Итак, я имею дело с приложением ASP.NET 4.0 Web Forms, в котором DAL построен с использованием комбинации LINQ-SQL и классического ADO.NET (для аудита транзакций и массовых обновлений).
У меня есть страница администратора на сайте, которая выполняет обновление группы записей (может быть тысяч), и не говоря уже о том, что в этих записях есть триггеры T-SQL. Излишне говорить, что это убийца обновления.
Так что, конечно, время ожидания истекло.
Транзакция обновления выполняется со следующим кодом:
db.ExecuteCommand("UPDATE [tblFoo] SET [IsFoo] = 0 WHERE [Bar] = {0}", bar.Id);
Так что это классическое обновление ADO.NET.
То, что я пытался сделать, это сделать вызов этого метода асинхронным, запустив поток при нажатии кнопки в форме:
protected void MyButton_Click(object sender, EventArgs eventArgs)
{
var thread = new Thread(OnMyAsyncMethod) { Name = "Hi, im a thread, how are you?"};
var dataArray = new object[2];
dataArray[0] = someData;
dataArray[1] = someData2;
thread.Start(dataArray);
}
Метод OnMyAsyncMethod просто выполняет приведенный выше вызов ADO.NET.
Это решило проблему пользовательского интерфейса, поскольку страница теперь отправляется обратно и немедленно обновляется. Но примерно через 30 секунд я вижу этот чудесный маленький мигающий свет на моей панели инструментов Visual Studio - «произошло необработанное исключение, хотите ли вы присоединить его к процессу и т. Д.».
Так что, конечно, сейчас фактический вызов в DAL истекает.
Я делаю это неправильно - есть ли способ выполнить транзакцию обновления (db.ExecuteCommand) полностью асинхронно?
Надеюсь, вы видите, что я пытаюсь сделать - мне просто нужно запустить убийцу транзакции T-SQL. Единственное, что мне нужно от вызова - это количество обновленных строк.
Есть идеи людей?