C# 正在中止的线程出错

C# 正在中止的线程出错,c#,asp.net,multithreading,abort,C#,Asp.net,Multithreading,Abort,我们有一个可以创建电子书的应用程序。 此应用程序有一个导出模块,用于创建AIR文件,但这可能需要一段时间(有些书有2500页)。 如果导出,则会出现以下错误: 线程正在中止。 描述:执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误的更多信息以及错误在代码中的起源。 异常详细信息:System.Threading.ThreadAbortException:正在中止线程。 源错误: 在执行当前web请求期间生成了未经处理的异常。有关异常的起源和位置的信息可以使用下面的异常堆栈跟踪

我们有一个可以创建电子书的应用程序。 此应用程序有一个导出模块,用于创建AIR文件,但这可能需要一段时间(有些书有2500页)。 如果导出,则会出现以下错误:

线程正在中止。
描述:执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误的更多信息以及错误在代码中的起源。
异常详细信息:System.Threading.ThreadAbortException:正在中止线程。
源错误:
在执行当前web请求期间生成了未经处理的异常。有关异常的起源和位置的信息可以使用下面的异常堆栈跟踪来识别。
堆栈跟踪:
[线程中止异常:正在中止线程。]
System.Web.HttpApplication.ExecuteStep(IExecutionStep步骤,布尔值&同步完成)+501
System.Web.ApplicationStepManager.ResumeSteps(异常错误)+564
System.Web.HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext上下文,异步回调cb,对象外部数据)+141
System.Web.HttpRuntime.ProcessRequestInternal(HttpWorkerRequest wr)+436
我已将运行时执行超时更改为3600秒,但它在3分钟内持续崩溃。
所以它与时间有关。。。每次我们接近崩溃的3分钟,我希望有人能帮助我。

很多时候,这个错误实际上是由OutOfMemory异常引起的。
是否有可用的InnerException?

IIS有一个“失控”线程保护,如果线程/appdomain运行时间过长,它将杀死该线程。

我认为Paul关于异常原因的看法是正确的。IIS和ASP.NET都具有限制请求所需最长时间的设置。对于ASP.NET,它位于Machine.Config文件中(查找httpRuntime元素,executionTimeout属性)。在我的开发机器上设置为90秒

但是,我不建议您更改该设置,因为它可以确保您的应用程序不会挂起错误的请求

长时间运行的任务应该使用异步执行。通过异步执行,实际工作在单独的线程上处理。这将释放处理请求的线程来处理其他请求,这有利于应用程序的整体性能


有一些关于这方面的好文章。例如:

这是如何托管的?在共享托管环境上?还是专用/内部?有很多方法可以控制这些设置,但我不知道它们是什么。我自己也受到了这个问题的影响,知道它的存在。当IIS回收工作进程时,您必须在IIS站点上查找有关配置的帮助。