gpt4 book ai didi

c# - 线程在长时间的 SP 执行中被中止?

转载 作者:行者123 更新时间:2023-11-30 18:40:09 25 4
gpt4 key购买 nike

我创建了一个执行很长 sp 的 asp.net 页面(在 SSMS 中大约 1 小时的 sp 执行时间)。

有一个 Admin.aspx 可以激活这个 SP。

在我添加的 web.config 中:

<httpRuntime maxRequestLength="111264" requestValidationMode="2.0" executionTimeout="10000000" />

还在我添加的连接属性中:

_cmd.CommandTimeout = 0; // unlimited

该函数使用 jquery ajax(到 ashx)来激活 sp(它工作正常)

jquery 调用一个激活 sp 的 ashx 文件。

但是我不希望 UI 被阻塞直到操作结束,所以我在 ashx 文件中创建了一个线程:

public void ProcessRequest(HttpContext context)    
{
string xmlFileNameParam = ...
string bakFileName = ...

ParameterizedThreadStart ThreadWithParam = dbFuncForThread;

Thread thread = new Thread(ThreadWithParam);
thread.IsBackground = false;

dynamic d = new ExpandoObject();
d.XmlFileNameParam = xmlFileNameParam;
d.BakFileName = bakFileName;
thread.Start(d);
}

public void dbFuncForThread(dynamic d)
{
// activate the long sp
}

但是过了一会儿,我在事件日志中看到这个错误(并且操作停止):**

There is a problem line 259Thread was being aborted. at System.Threading.Thread.SleepInternal(Int32 millisecondsTimeout)*

为什么?

我给了线程所有它需要的环境(连接超时,执行超时)

附言如果我不使用线程并放置这样的普通代码(尽管 UI 被阻止):

public void ProcessRequest(HttpContext context)        
{
string xmlFileNameParam = ...
string bakFileName = ...

dynamic d = new ExpandoObject();
d.XmlFileNameParam = xmlFileNameParam;
d.BakFileName = bakFileName;

dbFuncForthread(d);
}

public void dbFuncForThread(dynamic d )
{
// activate the long sp...
}

所以代码没问题,一切都很好。这是怎么回事,为什么会这样,我该如何解决?

最佳答案

我认为您可能会重新考虑您的设计,最好使用 Windows 服务为您做这件事。从 webservice 将数据传递到 windows 服务,然后执行 sp。 Web 环境中此场景的明显问题可能是 IISReset 或 appdomain 回收将中止所有线程。

关于c# - 线程在长时间的 SP 执行中被中止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8678651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com