2013-01-03 3 views
2

저는 어떻게 Task가 작동하는지 배우기 시작했으며 흥미로운 사례를 얻었습니다. 나는이 HttpTaskAsyncHandler하지만 ProcessRequestAsync 안에 내 코드가 고칠 수 일부 작업HttpTaskAsyncHandler 및 HTTP 컨텍스트

public class MyAsyncHandler : HttpTaskAsyncHandler, IReadOnlySessionState 
    { 
     public override async Task ProcessRequestAsync(HttpContext context) 
     { 
      //can use HttpContext here 
      await MyJob("data"); 
      //can use HttpContext here 
     } 

     public async Task MyJob(string data) 
     { 
      var func = Task.Factory.StartNew(() => Process(data)); 
      await func; 
     } 

     public string Process(string context) 
     { 
      **//can't use HttpContext here** 
      Elmah.ErrorSignal.FromCurrentContext().Raise(ex); 
     } 
} 

에 호출하는 경우 내가있는 HttpContext에 acccess을 얻을 수 있습니까? 나는 Process 방법이 다른 트레드에서 호출되지만 어쨌든 이해할 것입니다. 감사합니다/

+1

왜 작업을 스레드 풀로 푸시하고 나서 '대기'합니까? 왜 요청 스레드에서 작업을 수행하지 않습니까? –

답변

4

HttpContent가 별도의 스레드에 있기 때문에 작업 내에 HttpContent가 존재하지 않는 것이 맞습니다. 따라서 Process 메서드 (새로운 스레드) 내에서 Elmah의 새 인스턴스를 만드는 것에 액세스해야합니다. 이전 질문의 두 번째 또는 세 번째 대답 인 Using Elmah in a Console Application을 수행하면 원하는 것을 성취 할 수 있습니다.