ASP.NET MVC Futures 의 비동기 액 션 사용 하기

5829 단어 asp.net
전에 조 씨 의 이 두 편의 문장 을 본 적 이 있다.조 씨 의 비동기 적 인 실현 방식 도 연구 했다.
하지만 자신 이 확장 되 었 다 고 생각하면 ASP.NET MVC 에서 이 보 를 사용 하 는 것 은 정말 번 거 로 운 일이 다.마침 RC1 버 전부터 ASP.NET MVC Futures 에서 이 보 를 지원 하 는 몇 가지 종 류 를 제공 하 는 것 을 보 았 다.
관련 종 류 는 AsyncAction Descriptor,AsyncController,AsyncController Action Invoker,AsyncManager,AsyncResultWrapper,AsyncTimeoutAttribute,NoAsyncTimeoutAttribute 를 포함한다.관련 인 터 페 이 스 는 IAsyncAction Descriptor,IAsyncAction Invoker,IAsyncController,IAsyncManager Container 가 있다.
어떻게 쓰 는 지 알려 드릴 게 요.
1.비동기 액 션 사용 전 준비 작업
1.Microsoft.Web.Mvc 를 참조 합 니 다.    
2.먼저 비동기 처리 할 Url 을 MvcHttpAsyncHandler 에 맡 겨 처리 해 야 합 니 다.이 단 계 는 AsyncRoute Collection Extensions.MapAsyncRoute 에서 규칙 을 설정 하고 원래 의 MapRoute 처리 규칙 을 MapAsyncRoute 로 바 꿀 수 있 습 니 다.예 를 들 어:
            routes.MapAsyncRoute(

                "Default",

                "{controller}/{action}/{id}",

                new { controller = "Home", action = "Index", id = "" }

            );

3.해당 컨트롤 러 를 AsyncController 에 계승 합 니 다.
    public class HomeController : AsyncController    {    }

4.아래 에 정 의 된 Action 은 모두 HomeController 에 있 습 니 다.
2.첫 번 째 비동기 액 션 방식:Action,Action Complete 방식
ASP.NET MVC Futures 는 이름 에 따라 자동 으로 비동기 액 션 을 찾 는 방법 을 지원 합 니 다.
http://www.cnblogs.com/Home/Async1
사용 방법
       public void Async1(){

            //   

        }

        public ActionResult Async1Completed(){

            //         Action  +Completed  Action     Action

            return Content("Async1");

        }

3.두 번 째 비동기 액 션 방식:BeginAction,EndAction 방식
첫 번 째 방식 을 알 게 된다 면 두 번 째 방법 은 물론 이 고 다른 종류의 비동기 호출 과 함께 사용 하 는 것 입 니 다.
http://www.cnblogs.com/Home/Async2
        public delegate void AsyncEventHandler();//            ,     WebRequest/WebResponse/SqlConnection         

        public void Event1(){}

        public IAsyncResult BeginAsync3(AsyncCallback callback, object state){

           AsyncEventHandler asy = new AsyncEventHandler(Event1);

            ViewData["a"]=asy;//                  ,          

            return asy.BeginInvoke(callback, state);

        }

        public void EndAsync3(IAsyncResult result){

//     Action 

            var a = ViewData["a"] as AsyncEventHandler;

            a.EndInvoke(result);

            Content("  ").ExecuteResult(this.ControllerContext);

        }

4.세 번 째 비동기 액 션 방식:AsyncManager.RegisterTask 및 의뢰 사용
위 에서 두 가지 방법 을 사용 해 야 비동기 액 션 을 실현 하 는 것 이 귀 찮 은 것 같다 면(귀 찮 은 것 도 사실)Async Manager.RegisterTask 를 사용 하여 비동기 호출 을 수행 할 수 있 습 니 다.
http://www.cnblogs.com/Home/Async3
  	public void  Async2(){

            this.AsyncManager.RegisterTask(c => {

                //   ,      

                c(null);

            }, delegate(IAsyncResult result) {

                //                   

                Content("Async2").ExecuteResult(this.ControllerContext);

            });

        }

 
사실 어떤 방법 이 든 완벽 하지 않다 고 생각 합 니 다.저 는 개인 적 으로 Action/Action Complete 의 방법 이 좀 더 아름 다 울 수 있 고 보통 사용 하기에 적합 하 다 고 생각 합 니 다(이 세 가지 비교 만).다만 AsyncManager.RegisterTask 의 방법 은 값 을 전달 하 는 것 이 편리 하고 Begin/End 방법 은 다른 비동기 적 인 조작 과 결합 하기에 더욱 적합 합 니 다.
물론 본 고 는 아직 언급 하지 못 한 부분 이 많 을 것 입 니 다.다른 비동기 호출 방식 과 Filter 를 포함 하여 여러분 들 이 많이 토론 하 시기 바 랍 니 다.
조 씨 의 두 문장 을 동봉 하 다
ASP.NET MVC 에 비동기 액 션 기능 확장(상)
ASP.NET MVC 에 비동기 액 션 기능 확장(하)
나의 ASP.NET MVC 시리즈:Asp.net Mvc 프레임 워 크 시리즈

좋은 웹페이지 즐겨찾기