因此,我正在处理一个ASP.NET 4.0 Web窗体应用程序,其中DAL使用LINQ-SQL和经典ADO.NET(用于审计事务和批量更新)的组合构建。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事务的杀手。我唯一需要回来的是更新的行数。
任何想法的人?
我知道 - 但即时通讯在我的异步方法不访问任何页面上。所有即时消息都是在点击按钮上 - 用params异步调用一个方法。该方法不需要页面,对象引用,什么也不需要 - 它是执行数据库更新的静态方法。无论如何,这个问题可以通过增加超时来解决(如下所示)。没有冒犯,但我不认为你阅读了整个问题。 – RPM1984 2010-08-13 04:08:29