ローカルのdevサーバ(cassini?)で動作するVS2010のWebProjectをデバッグしています。 aspxページの1つがManualResetEvent.WaitOne()を呼び出し、別のページaspxページがManualResetEvent.Set()(同じグローバルオブジェクト上)を呼び出して最初のページを解放します。Visual Studio Asp.Net開発サーバーは本当にマルチスレッドですか?
VS2010のスレッドリストを見ると、ワーカースレッドがたくさんあるようです。ただし、WebサーバーはManualResetEvent.WaitOne()呼び出しでブロックされている間は何も処理を停止するようです。したがって、.WaitOne()がタイムアウトしない限り、ManualResetEvent.Set()はロードされません。
ここでは何が起こっていますか?
// Sample Code
Class SyncTest {
private System.Threading.ManualResetEvent eConnected =
new System.Threading.ManualResetEvent(false);
private bool isConnected;
public SyncTest()
{
this.isConnected = false;
}
public void SetConnected(bool state)
{
isConnected = state;
if (state)
eConnected.Set();
else
eConnected.Reset();
}
public bool WaitForConnection(int timeout)
{
return eConnected.WaitOne(timeout);
}
}
メイン実行スレッドを実際に停止するべきではありません。これは、開始するワーカースレッドで正常に動作します。同様に、セッション間で話したい場合は、アプリケーションオブジェクトを使用する方が優れたメカニズムがあります。 –
@SimonHalseyメインexecスレッドはこれの影響を受けません。それは実際にセッションロックに関連していました。 – MandoMando