ASP.NET PageAsyncTask 소개 CSharp

ASP.NET 2.0 부터 새롭게 등장한 class들이 상당히 많습니다.
확장성을 고려한 PageAdapter, ControlAdapter라던지
성능을 고려한 비동기 호출 방식 (기존에도 있었나?) 의 다양화 등등...

제가 ASP.NET을 전문적으로 개발하지 않고, 잘 사용도 하지 않지만, 기반이 되는 부분은 약간 건드린다고 할 수 있기 때문에 가끔 MSDN에서 ASP.NET 관련 자료를 찾아봅니다.

오늘 얘기할 것은 PageAsyncTask 라는 class입니다.

목적은 ASP.NET Page 작업 중, 속도가 중요한데, 겉가지 작업들이 많아 실제 주(main) 작업하는데 방해가 될 때가 있습니다.
즉 주(main) 작업의 필요조건에 해당하는 작업이 아니라 충분조건에 해당하는 작업 또는 부가 서비스 작업(실패해도 상관없는) 을 순차적으로 실행해서 생기는 성능상의 문제를 극복하고자 만들어진 것입니다.

PageAsyncTask 를 사용하려면 Page 자체가 Async해야 하고, 비동기 작업의 제한 시간을 설정해 줘야 합니다. web.config에서 application 전체의 비동기 작업의 제한시간 (AsyncTimeout) 을 설정할 수도 있고, Page 별로 재정의를 할 수도 있습니다.

특히 여러개의 PageAsyncTask를 실행할 때는 비동기 실행이므로, 몇개가 되던 병렬로 실행되므로, CPU가 많은 서버에서 성능상의 향상을 기대할 수 있겠습니다.

대략 생각나는 적용대상으로는 Log 쓰기, 부가 정보 얻기 (페이지 실행 자체와는 별 상관없는) 것들이 될 것 같습니다.

예를 들면, 한 페이지에서 Report 를 만들 때, Chart 와 목록을 만드는 것이 있다면, Chart만드는 작업을 Async하게 하고, 목록 만드는 것을 주(main) 작업을 하게 합니다. chart가 다 만들어질때까지 기달릴 수 도 있기 때문에 옵션으로 리포트만 보여주기, chart까지 보여주기 등등을 수행할 수 있습니다. (이 방법보다 더 유연한 방법도 있긴 합니다만, Page안에서 이 작업이 이루어 지면 좋겠네요)

예제 코드를 보니 아쉬운게... DI (Dependency Injection)을 이용하여 PageAsyncTask를 Page에 밀어 넣어주면, Page 변경 없이, 환경설정에서, 옵션으로 처리할 수 있어서 확장성이 더 좋아질 것으로 예상됩니다만...