2014-01-24 54 views
0

我有一個基本的Asp.Net應用程序,爲了測試一個問題我想要兩個IE實例調用一個asp.net頁面,我想要第一個阻塞(Thread.Sleep),第二個繼續,所以我有這樣的代碼:在Visual Studio中的Asp.Net線程

private static bool firstOne = true; 
... 
if (firstOne) 
{ 
    firstOne = false; 
    System.Threading.Thread.Sleep(10000); 
} 

什麼我實際上看到的是兩個頁面等待睡眠來完成,這是因爲如果有一個線程服務兩者。

注:我沒有連接調試器,也沒有任何斷點

這是我的工作電腦,默認的machine.config和web.config文件。沒有不尋常的配置。

這不是我平時都這樣做,我可以很容易地在這裏失蹤

任何想法了一些東西明顯?

+0

什麼Web服務器您使用運行應用程序? IIS,IIS Express或內置的Visual Studio Web服務器。 –

+0

這與Visual Studio有什麼關係?此外,ASP.NET代碼不能「感知」瀏覽器實例 - 只有請求。 –

+0

只是爲了幫助他人的信息,有兩個獨立的IE實例,但他們是會話共享。要解決此問題,請創建一個快捷方式並使用-nomerge作爲參數 – tony

回答

1

原因是asp.net會話模塊鎖定請求,直到完成。

此外,您置於睡眠中的線程是請求的線程,而不是新線程。如果你創建一個新頁面並離開頁面返回,那麼新的線程將會獨自生存和死亡,而不會影響你的會話。會話鎖定請求頁面,並在頁面完成時解鎖。 會話鎖定用戶的每個請求以同步它們。爲了避免它,您只需關閉該頁面,或使用默認情況下不使用會話的處理程序。

您還可以製作完全自定義的會話來處理這種情況。

如果您想知道這是否合適,該會話會鎖定您的用戶,是的,對於啓動網站非常有用,因爲它確實可以幫助您同步用戶操作。如果session不鎖定你的用戶,你必須通過你自己的互斥體,以及你的用戶的每個動作,例如當你在數據庫中插入某些東西來完成。

一個類似的問題: Web app blocked while processing another web app on sharing same session

相關問題