2014-02-24 21 views
0

我花了一個星期的時間試圖解決這個問題。這個想法是我需要有2個按鈕,「執行」和「取消」。 「執行」運行一個長的SQL查詢。取消必須能夠「取消」查詢。問題是,當我發送2個Ajax查詢到服務器,它們是按順序完成的,所以「取消」單擊處理函數不能「取消」前一個(雖然我有一個查詢我可以調用Q.cancel( ))。我看到這與「鎖定會話」有關。從ASP.net中取消SQL請求頁

當單擊「取消」時,我甚至無法將用戶重定向到另一個網頁,因爲ajax調用「execute」不允許執行其他任何操作,直到它完成。

我試過使用微軟的反應式擴展(rx.net)庫,這可能會讓我爲「執行」創建另一個線程,但在這種情況下,因爲我不等待該線程完成並返回,我沒有收到查詢結果。

請幫忙。非常感謝除「不取消它」之外的任何幫助。

回答

0

正常情況下,請求應該在線程池的不同線程上處理。這聽起來像你使用IISExpress或以某種方式限制你的線程數在IIS上。1

除了調查您的IIS設置,我們鼓勵您使用asynchronous handlers長時間運行的請求,因爲它們不佔線程。這將允許單個線程處理「執行」和「取消」請求,儘管您必須在會話狀態的某個位置存儲CancellationToken