2009-05-18 48 views
0

我有一種情況,用戶請求執行長時間運行的進程。我計劃在代碼隱藏的另一個線程上啓動它,並將消息返回給用戶「處理」。然後每隔幾秒鐘左右我會輪詢(通過異步調用)其狀態的線程。線程完成後,我想顯示成功消息。ASP.NET在長時間運行的線程上檢查線程狀態?

問題,我怎麼輪詢線程一旦原始請求是否已經完成?

據我明白,頁對象將分拆一個單獨的線程。當請求完成時,Page對象不再存在......但那個線程呢?我如何獲得我創建的該線程的狀態?

回答

3

那麼,你就需要標識請求的一些方式。如果您希望能夠擴展到多臺計算機,您應該考慮將請求ID和當前狀態存儲在數據庫中(或某些類似可從任何地方訪問的存儲)。

如果你不關心這種情況你不擔心的AppDomain回收,只是你可以從請求ID到狀態的單身字典 - 但可以考慮將它自動一段時間,如果沖洗後本身客戶端就會消失並且不檢查狀態。 (當然,它不一定是一個真正的單身人士 - 它可能是一些提供依賴注入的共享資源,但重點是需要共享,所以你可以從新的請求)

你也可能使用會話支持的對象 - 與有關多服務器網站和AppDomain回收再警告。

+0

所以,我創建原始請求的一個單例類,存儲(請求ID,狀態)。那麼線程將通過使用該單例類來更新狀態。那麼在任何後續的請求中,我都可以通過該單例類來檢查狀態。那是對的嗎? – 2009-05-18 14:22:50

0

我不同意喬恩的答案。您不需要識別請求的方式,您需要一種唯一標識您的請求創建的線程的方式。然後,您的ajax請求輪詢線程可以檢查線程是否完成執行。我不明白爲什麼原來的請求是在所有有關...