[ASP.NET] Task.Run() 이용 시 HttpContext 처리

728x90
반응형

 

동기 방식으로 설계된 프로젝트에서, 비동기를 호출하기 위해서 Task.Run() 메소드를 이용해서 호출합니다. 

개별 요청에 대한 HTTP 관련 정보를 캡슐화 하는 HttpContext를 이용해야 하는 경우, 현재 요청에 대한 정보를 Task.Run() 메소드 이용시 공유할 수 없는데요.

 

이를 해결 하기 위한 방법을 간략하게 정리하였습니다. 

 

 

사용방법

public async Task<bool> UpdateAsync()
{
	...
}


public void main()
{
    var result = Task.Run(async () => 
    {
    	HttpContext.Current = this.Context;
    	return await UpdateAsync();
    }).Result;
}

조금 불편한 방식이긴 합니다만, 

Task.Run() 실행시, 현재 Context를 넘겨주는 방식으로 데이터를 공유하였습니다. 

 

HttpContext를 이용해서 추가 적인 처리를 하는 것이 아니라면 상관없겠지만, 

저희 프로젝트에서는 해당 Context를 이용해서 유저의 세션정보를 추가로 Logging 하는 부분이 있어서 해당 방법으로 호출 하여 사용했습니다. 

 

 

 

 

 

 

728x90