2010-02-04 76 views
0

我目前在Asp.Net应用程序中使用ThreadPool.QueueUserWorkItem。 基本上,用户使用带有FileUpload控件的表单上传文件。 该文件可能需要相当长的时间才能处理导致用户超时的情况,并且还会在处理上传时使UI不可用。 所以我觉得还是叫我的导入方法是这样的:ThreadPool.QueueUserWorkItem - 奇怪的行为(Asp.Net)

ThreadPool.QueueUserWorkItem(this.NameOfMyImportMethod); 

的导入方法需要去努力已经为导入类被创建时设置为类变量的数据(我不是在后面的代码中执行导入工作!)。

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

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

我不能一直重新创建它,但它似乎发生的主要是如果我在实际提交之前玩过表单造成一些后发布。

有关可能会发生什么的任何想法?

感谢您的帮助!

回答

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在页面?

0

感谢您的答复 - 虽然我要去(种)这个回答我。 我最终只是手动创建一个新的线程 - 它似乎已经解决了这个问题。 这不是一个好的解决方案,我仍然不知道为什么会发生这种情况。