我有一个网络应用程序,其中有一个页面,我每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这是处理此问题的大多数其他帖子所围绕的。我能做些什么来防止异常发生?
答案 0 :(得分:1)
所以这是一个我一直想要整理一年多的错误,所有其他相关问题似乎都在解决Response.End()
问题,但事实并非如此。
我一直认为在发生错误的方法中出现了问题,但实际上是工作人员调用错误开始的地方。
解决方案很简单:我添加了.Wait()
,从那时起,bug就从日志中消失了。
System.Threading.Tasks.Task.Factory
.StartNew(() => {
new MyApplicationWorker().RunApplicationWorker().Wait();
});
感谢alex.b提供了导致此other question的评论,我希望这有助于其他人遇到同样的工作线程中止问题。