2016-08-19 24 views
1

我工作的一個項目(ASP.NET MVC 5)可能有一些比賽的危害,當涉及到業務邏輯,當兩個用戶調用的具體是什麼情況大致相同時間內的相同控制器方法。調試運行在asp.net mvc的多線程5控制器的方法

所以我決定在上述控制器方法設置一個斷點來測試一下,然後我嘗試通過發送從我的瀏覽器的請求命中該斷點。然後我打開一個新標籤,並嘗試再次加載我的網站,但問題是它沒有加載。

網站是完全(所有頁面)沒有反應,直到我釋放斷點。

在線程窗口,我可以看到有少數工作線程未分配和被卡在斷點一個單獨的線程。

我正在使用Visual Studio 2015社區。

這種行爲是否正常?如果是這種情況,我應該如何處理我的問題?

+0

調試將鎖定所有線程,直到中斷釋放。否則,你會如何調試任何東西? – Liam

+0

它會卡在你的斷點,直到你釋放和IIS(在現實網站)將採取這兩個要求不同。 – sagivasan

+0

的可能的複製[如何檢測和調試多線程的問題?(http://stackoverflow.com/questions/499634/how-to-detect-and-debug-multi-threading-problems) – Liam

回答

3

我認爲你誤解了調試在這裏的工作原理。 Visual Studio正在做它應該做的事情。它會停止你的斷點的所有執行,直到你釋放它。在實際的生產環境中,或者在沒有斷點的情況下進行調試時,您會看到它將同時返回到兩者(只要您可以分辨,除非您的操作時間很長,在這種情況下,您應該使用異步/等待)。

在現實中,它(IIS)將隊列中的請求並處理它們。

+0

因此,如果我理解正確,我將完成調試我的一個線程,否則IIS不會將任務分配給其他工作線程。如果它只排隊請求,那是一個無賴。 – Smiki

+0

調試器連接到工作進程(w3wp)。工作進程管理線程。當命中斷點時,VS會對工作進程(和所有線程)進行修改。 IIS使用工作進程執行所有服務器端計算。這實際上更多的是與IIS相比.Net。 – Liam

+0

@Liam我現在明白了,謝謝 – Smiki