我有一个web应用程序,它有一个页面,我每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中,我有这一行来防止超时,我知道worker在比这更短的时间内完成。
<httpRuntime enableVersionHeader="false" executionTimeout="300" />如您所见,页面加载并调用一个在后台运行的worker。这里没有Response.End问题或Server.Transfer,这是大多数其他处理这个问题的帖子都围绕的问题。我能做些什么来防止异常的发生?
发布于 2017-02-02 00:11:02
这是我一年多来一直在寻找的一个bug,所有其他相关问题似乎都与Response.End()问题有关,但这里并非如此。
我一直认为发生bug的方法有问题,但实际上是在调用worker的时候bug才开始的。
解决方案很简单:我添加了.Wait(),从那时起,这个bug就从日志中消失了。
System.Threading.Tasks.Task.Factory
.StartNew(() => {
new MyApplicationWorker().RunApplicationWorker().Wait();
});感谢alex.b对这篇other question的评论,我希望这能帮助那些遇到同样问题的人。
https://stackoverflow.com/questions/41899848
复制相似问题