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 프레임 워 크 시리즈
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
작업 중 문제 해결 - (win 2003 asp. net) Session 과 페이지 전송 방법 으로 해결 방안 을 정상적으로 사용 할 수 없습니다.또한 F 는 처음에 우리 의 BP & IT 프로젝트 팀 이 Forms 폼 검증 을 사용 했다 고 판단 할 수 있 습 니 다. 페이지 를 뛰 어 넘 는 것 은http://hr.bingjun.cc/MyTask/MyTas...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.