2016-07-04 1 views
0

나는 면접을했고 나는 다음과 같은 질문을 받았다 : 요청은 ASHX Handler에서 다른 요청 값을 얻습니까?

가의 2 개 요청이 ASHX (핸들러)에 동일한 시간에 을 보낸 가정 해 봅시다.

먼저 요청 : http://www.secretwordHandler.com/?SecretWord=ABRA

두 번째 요청 :

public void ProcessRequest (HttpContext context) { 

     Random rnd = new Random(); 
     int randomSleepTime = rnd.Next(1000, 10001); 

     Thread.Sleep(randomSleepTime); 

     string secretWord = HttpContext.Current.Request.QueryString["SecretWord"]; 

     Thread.Sleep(randomSleepTime); 

     //What is the secret Word?? 
     Console.WriteLine(secretWord); 

    } 

는 첫 번째 요청은 두 번째 요청의 결과를 얻을 것이다 가능 : http://www.secretwordHandler.com/?SecretWord=KADABRA

이것은 ASHX은?

나는

+1

Thread.Sleep은 현재 스레드를 일시 중단합니다 ... context.Current.Request.QueryString [ "SecretWord"] ... ProcessRequest()에 대한 호출이 스레드로부터 안전하지 않으면 일어날 수 있지만 ... 이 기능, 나는 아니오라고 말할 것입니다. –

+1

여기서 키커는 (정적 인)'HttpContext.Current.Request'가 사용되고 인스턴스화 된 입력 컨텍스트가 아닌 것처럼 보입니다. –

+0

@ AllanS.Hansen 그건 내가 생각한 것이지만, 어떻게 될지 확실히 말할 수는 없다. ... –

답변

1

HttpContext.Current는 스레드로부터 안전하지 않습니다 것 같다 ... 스레드 수면 I 혼란 얻었 기 때문에 내가 인정해야 그것에 대한 답에 대해 확실하지 않았다, 그러나 그것은 필요가 없습니다. 이것은 Marcus van Houdt의이 기사에서 설명합니다. Understanding the SynchronizationContext in ASP.NET

질문에 대답하십시오 : 첫 번째 요청이 두 번째 요청의 결과를 얻지 못하게해야합니다.

관련 문제