ThreadPool.QueueUserWorkItem - 奇怪的行为(Asp.Net)

时间:2010-02-04 15:34:31

标签: c# .net asp.net threadpool

我目前在Asp.Net应用程序中使用ThreadPool.QueueUserWorkItem。 基本上,用户使用带有FileUpload Control的表单上传文件。 该文件可能需要很长时间才能处理,这会导致用户超时,并且在上载处理过程中也会使UI无法使用。 所以我想我只需要调用我的导入方法:

ThreadPool.QueueUserWorkItem(this.NameOfMyImportMethod);

导入方法需要处理的数据在构造Import类时已经设置为类变量(我没有在后面的代码中进行导入工作!)。

这一切在大多数时候都很好。然而,看似随意的导入方法不会异步调用,浏览器等待响应并最终超时。

我确保我在导入方法中捕获所有异常。

我不能一直重新创建它,但似乎主要是因为我在实际提交之前使用该表单导致一些帖子后退。

关于这里可能会发生什么的任何想法?

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

这有点过分(特别是如果您在开发环境中看到问题,这些线程不应该存在很多竞争),但是您可能已经没有线程池线程和/或者陷入僵局,等待它们变得可用。

您可以在页面中插入类似下面的内容进行检查,也许是在排队代表之后:

int workerThreads;
int maxWorkerThreads;
int completionPortThreads;
int maxCompletionPortThreads;

ThreadPool.GetAvailableThreads(out workerThreads, out completionPortThreads);
ThreadPool.GetMaxThreads(out maxWorkerThreads, out maxCompletionPortThreads);

System.Diagnostics.Debug.WriteLine(string.Format("There are {0} of {1} worker threads available.\r\n", workerThreads, maxWorkerThreads));

您是否在页面的其他位置使用ThreadPool

答案 1 :(得分:1)

我建议您使用Async PagesAsync Hanlder上传文件。

关于上传文件,请点击此处:http://weblogs.asp.net/jgalloway/archive/2008/01/08/large-file-uploads-in-asp-net.aspx

答案 2 :(得分:0)

感谢您的回复 - 虽然我会(有点)回答这个问题。 我最终只是手动创建一个新线程 - 似乎解决了问题。 这不是一个很好的解决方案,我仍然不知道为什么会这样。