例外:当不处理Response.End问题时,线程被中止

时间:2017-01-27 17:37:14

标签: c# asp.net

我有一个网络应用程序,其中有一个页面,我每30分钟调用一次以激活工作人员。一周大约5-7次,我得到Thread was being aborted例外

aspx看起来有点像:

<%@ Page Language="C#" AutoEventWireup="true" %>
<html>
<head runat="server">
    <script runat="server"> 
    public void Page_Load(object sender, EventArgs e)
    {
        System.Threading.Tasks.Task.Factory         
            .StartNew(() => { new MyApplicationWorker().RunApplicationWorker(); });
    }   
    </script>
</head>
<body></body>
</html>

在Web.config中,我有这条线来防止超时,我知道工人完成的时间远远少于此。

<httpRuntime enableVersionHeader="false" executionTimeout="300" />

如您所见,页面加载并调用在后台运行的worker。没有Response.End问题或Server.Transfer这是处理此问题的大多数其他帖子所围绕的。我能做些什么来防止异常发生?

1 个答案:

答案 0 :(得分:1)

所以这是一个我一直想要整理一年多的错误,所有其他相关问题似乎都在解决Response.End()问题,但事实并非如此。

我一直认为在发生错误的方法中出现了问题,但实际上是工作人员调用错误开始的地方。

解决方案很简单:我添加了.Wait(),从那时起,bug就从日志中消失了。

System.Threading.Tasks.Task.Factory         
      .StartNew(() => { 
          new MyApplicationWorker().RunApplicationWorker().Wait(); 
      });

感谢alex.b提供了导致此other question的评论,我希望这有助于其他人遇到同样的工作线程中止问题。