編輯(再次):讓我簡化我的問題。我有一個Windows服務,它暴露了一些WCF終端用類似的方法:從Windows服務處理長時間運行的操作
int ExecuteQuery(string query) {
// asynchronously execute query that may take 1 second to 20 minutes
return queryId;
}
string GetStatus(int queryId) {
// return the status of the query (# of results so far, etc)
}
什麼是實現ExecuteQuery
方法的最佳方法是什麼?我應該打電話ThreadPool.QueueUserWorkItem
讓我的查詢進行嗎?
請注意,執行查詢後的實際工作是由負載均衡黑匣子完成的。我希望能夠同時進行多個查詢。
這個比喻是一個網絡瀏覽器,它可以同時下載多個文件,並且你有一個下載管理器可以跟蹤每個文件的狀態。
我想我可能在這裏大聲思考,並讓我的問題看起來比以前更復雜。有很多「建議」表示「不要過度使用ThreadPool,尤其是對於長時間運行的任務」。我只想看看是否有任何針對我的問題的建議。 – intoOrbit 2010-03-10 15:29:33
有一種情緒反對在ThreadPool中使用「長時間運行」的任務,因爲如果任務正在等待另一個任務執行某項工作,並且該任務正在等待在同一個ThreadPool中執行,但是ThreadPool已滿,那麼排隊任務可能永遠不會被執行,並且會導致死鎖。即使在短時間運行的任務中也會發生這種情況我想如果有人遇到這個問題,那麼他們只是錯誤地設計了他們的程序。 – Kiril 2010-03-10 15:51:22