2010-02-04 115 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

感謝您的答覆 - 雖然我要去(種)這個回答我。 我最終只是手動創建一個新的線程 - 它似乎已經解決了這個問題。 這不是一個好的解決方案,我仍然不知道爲什麼會發生這種情況。