2016-08-19 11 views
1

私は、ビジネスロジックに関して、いくつかの競合上の危険を伴う可能性のあるプロジェクト(ASP.NET MVC 5)、特に2人のユーザーが同じコントローラ方法でほぼ同じ時間にasp.net mvc 5コントローラメソッドで複数のスレッドをデバッグ

私は前述のコントローラーメソッドでブレークポイントを設定してテストし、ブラウザーからリクエストを送信してそのブレークポイントにヒットを試みました。それから私は新しいタブを開き、私のウェブサイトを再びロードしようとしますが、問題はロードされていないということです。

私がブレークポイントをリリースするまで、Webサイトは完全に(すべてのページ)応答しません。

スレッドウィンドウでは、割り当てられていないワーカースレッドが少なく、ブレークポイントでスタックされているスレッドが1つしかないことがわかります。

私はVisual Studio 2015コミュニティを使用しています。

この動作は正常ですか?それが事実なら私はどのように私の問題に近づくべきですか?

+0

デバッグは、ブレークが解除されるまで、すべてのスレッドをロックします。そうでなければ何をデバッグしますか? – Liam

+0

あなたが解放し、IIS(現実のサイト)がそれらの2つの異なる要求を取るまで、あなたのブレークポイントで立ち往生します。 – sagivasan

+0

[マルチスレッドの問題を検出してデバッグするにはどうすればいいですか?](http://stackoverflow.com/questions/499634/how-to-detect-and-debug-multi-threading-problems) – Liam

答えて

3

ここでデバッグの仕組みを誤解していると思います。ビジュアルスタジオは、それが想定していたものを正確にやっています。あなたがそれをリリースするまでブレークポイントでのすべての実行を停止します。実際の実稼働環境やブレークポイントなしでデバッグしているときには、同時に実行することができます(実行時間が極端に長くないと表示できない限り表示されます)。非同期/待機)。

実際には、IIS(IIS)は要求をキューに入れて処理します。

+0

私は正しく理解した場合、私は1つのスレッドのデバッグが終了するまで、IISは他のワーカースレッドにタスクを割り当てないでしょうか?要求をキューに入れるだけであれば、それは酷いことです。 – Smiki

+0

デバッガはワーカープロセス(w3wp)に接続されています。ワーカープロセスはスレッドを管理します。 VSは、ブレークポイントに達すると、ワーカープロセス(およびすべてのスレッド)に影響を与えます。 IISは、ワーカープロセスを使用してすべてのサーバー側の計算を実行します。実際にはIISよりも.Netに関係しています。 – Liam

+0

@Liam私は今、理解しています。 – Smiki