asp.net – “线程被中止了什么”. ‘SNIReadSync(SNI_Conn *,SNI_Packet **,
发布时间:2021-01-12 09:54:32 所属栏目:asp.Net 来源:互联网
导读:你好, 在ASP.Net WebApp(使用SQL Server 2008)中,当处理大量数据时,我会收到以下异常,并且在代码中的随机位置看来这个异常被抛出. 这个异常是什么意思?是超时吗? Thread was being aborted. at SNIReadSync(SNI_Conn* , SNI_Packet** , Int32 ) at SNINativ
你好, 在ASP.Net WebApp(使用SQL Server 2008)中,当处理大量数据时,我会收到以下异常,并且在代码中的随机位置看来这个异常被抛出. 这个异常是什么意思?是超时吗? Thread was being aborted. at SNIReadSync(SNI_Conn*,SNI_Packet**,Int32 ) at SNINativeMethodWrapper.SNIReadSync(SafeHandle pConn,IntPtr& packet,Int32 timeout) at System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult,TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket() at System.Data.SqlClient.TdsParserStateObject.ReadBuffer() at System.Data.SqlClient.TdsParserStateObject.ReadByte() at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj) at System.Data.SqlClient.SqlDataReader.ConsumeMetaData() at System.Data.SqlClient.SqlDataReader.get_MetaData() at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds,RunBehavior runBehavior,String resetOptionsString) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior,Boolean returnStream,Boolean async) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,String method,DbAsyncResult result) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,String method) at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior,String method) at System.Data.SqlClient.SqlCommand.Exec 谢谢! 解决方法“线程正在中止”99%的时间是由您的代码使用Thread.Abort()引起的,在任何其他情况下终止进程,而不是灾难性故障. Thread.Abort是邪恶的,因为它从它自己的执行代码之外的线程中注入一个异常,因此期望和优雅地处理它是非常困难的,甚至是不可能的.如果您在另一个线程中运行此代码(良好的选择BTW; DB操作是多线程的天然候选),请勿使用Thread.Abort()尝试控制线程.您应该建立线程的代码来响应您可以触发的一些外部更改,这将导致其正常结束处理.这是一个简单的例子: public class Foo { public void MainMethod() { bool cancel = false; //our external flag //our worker thread,which is being given a callback method to poll at "safe" times. var workerThread = new Thread(()=>AsyncMethod(()=>cancel)); //start the thread workerThread.Start(); //do some other work that takes less time than the thread Thread.Sleep(200) //async thread is still going; cancel execution and wait for graceful exit. cancel = true; workerThread.Join(); } public void AsyncMethod(Func<bool> wasCancelled) { //Do some repetitive task that takes longer than we're willing to wait for(var i=1; i<2000; i++) { if(wasCancelled()) break; //generally a "safe" place to check Thread.Sleep(50); //stand-in for some atomic operation that should not be interrupted. } if(wasCancelled()) Debug.WriteLine("Thread cancelled"); else Debug.WriteLine("Thread completed"); } } 这个例子确实使用了一个带有“external closure”的lambda;如果我们的方法在工作线程完成之前退出,则lambda将会出错,因为取消变量已被取消并被破坏.在将这种模型适应您的实际架构时,请牢记这些事项;如果你在一个方法中启动线程并等待它在另一个方法中完成,同时在第三个(实际上是相当常见的情况)触发取消的情况下,该标志必须存在于不会在工作线程有结束执行. (编辑:百色站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – MVC4部分视图没有将值加载到“容器”模型中
- asp.net-mvc – MVC 5 OWIN登录声明和AntiforgeryToken.我错
- asp.net-mvc – ASP.NET MVC项目架构
- asp.net-mvc – 已经使用相同的参数类型定义了一个名为“Cr
- asp.net-mvc – 从Api控制器内生成绝对的url to action
- asp.net-mvc-4 – MVC4捆绑GZIP和头文件
- asp.net-mvc – MVC导航到不同的控制器视图
- 在mvc4 asp.net中的Razor View中的模型声明
- 如何合理地构建我的ASP.NET MVC 2项目与区域
- MVC .Net Cascade在使用EF Code First Approach时删除
推荐文章
站长推荐
- asp.net – 部分视图呈现按钮点击
- asp.net – 如何使用Fiddler编辑HTTP请求
- asp.net – compilation debug =“true”和发布模
- asp.net – CalendarExtender定位问题
- asp.net-mvc – 有什么技巧/技巧使用亚音速与Asp
- asp.net-mvc – MVC应用程序调试错误:viewstate
- asp.net-mvc – 你如何指定在列表框中显示多少项
- asp.net – 如何访问Global.asax静态成员?
- asp.net – Tridion分析和个性化错误:用户不能为
- 详解Asp.net Core 使用Redis存储Session
热点阅读