asp.net – “线程被中止了什么”. ‘SNIReadSync(SNI_Conn *,SNI_Packet **,
发布时间:2021-01-12 14:09:48 所属栏目: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 5针对dnx451 / dnx46性能
- ASP.Net – AJAX UpdatePanel中的Javascript
- jQuery Ajax方法调用 Asp.Net WebService 的详细实例代码
- .NET牛人应该知道些什么,我的回答
- asp.net neatUpload 支持大文件上传组件
- asp.net-mvc – MVC错误 – 传入字典的模型项目的类型为“S
- LoginView中的ASP.NET LoginStatus不会触发LoggingOut事件
- Autofac和ASP.NET Web API ApiController
- asp.net-mvc – jQuery脚本包含在mvc 4模板的页面底部
- asp.net – 在MVC 4.0中使用部分视图中的节
推荐文章
站长推荐
- asp.net – 我应该在Web应用程序中嵌入CSS / Jav
- ADO.NET 2.0 Dataset和Datatable 新功能新特性
- asp.net-mvc-3 – ASP.net MVC – 模型绑定不包括
- asp.net-mvc – 使用AWS .NET SDK进行SNS订阅确认
- .net – Viewstate隐藏字段如此之大,一切都会崩溃
- asp.net – 确定当前页面是否需要授权?
- asp.net-mvc – MVC应用程序调试错误:viewstate
- asp.net – GetExternalLoginInfoAsync()loginIn
- 在ASP.NET中,获取基本UR1请求的最快方法是什么?
- asp.net web.config加密解密方法
热点阅读