Является ли сервер разработки Visual Studio Asp.Net действительно многопоточным? - PullRequest
2 голосов
/ 28 октября 2011

Я отлаживаю WebProject в VS2010, который работает на локальном сервере разработчика (cassini?). Одна из страниц aspx вызывает ManualResetEvent.WaitOne (), а другая страница aspx страницы вызывает ManualResetEvent.Set () (в том же глобальном объекте) для освобождения первой страницы.

Когда я смотрю на список потоков в VS2010, кажется, что есть много рабочих потоков. Однако веб-сервер, кажется, останавливает обработку чего-либо, пока блокируется вызовом ManualResetEvent.WaitOne () Поэтому ManualResetEvent.Set () не загружается, если время ожидания .WaitOne () истекло.

Что здесь происходит?

// 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);

}
}

1 Ответ

3 голосов
/ 28 октября 2011

Веб-сервер обрабатывает только одну страницу за раз от каждого пользователя.

Если вы хотите, чтобы страницы, запрошенные у одного пользователя, выполнялись параллельно, вы должны сделать страницы (кроме одной) безсессионными.

Поместите EnableSessionState="false" в директиву @Page, чтобы сделать страницу безсессионной.

Это, конечно, означает, что вы не можете идентифицировать запрос, используя данные сеанса.Если вы хотите узнать, кто запрашивал страницу, вы должны отправить ее вместе с запросом.

...