문제

배경:

http://www.hanselman.com/blog/Hansel MinutesPodcast188ASPNETMVC2BetaWithPhilHaack.aspx

27:15부터 시작하여 RenderAction이 28:43에서 호출된 비동기 작업 메서드로서 RenderAction이 비동기성의 일부가 되지 않는다는 내용이 논의되었습니다.

(1.GetNews 2.GetWeather 3.GetStock을 비동기적으로 호출하는 홈 포털 인덱스 작업을 가정해 보겠습니다. 동일한 보기에 사용자 최근 게시물을 표시하는 RenderAction이 있습니다.(GetUserRecentPosts))

질문

RenderActions 자체가 비동기적이라면 어떻게 될까요?

그래도 홈 인덱스가 작업을 완료한 후에만 GetUserRecentPosts가 호출됩니까?

RenderActions는 기본적으로 뷰에서 비동기적으로 렌더링되어야 합니까?

도움이 되었습니까?

해결책

내 생각엔 당신이 이 일을 성공적으로 할 수 없을 것 같아요.뷰가 렌더링을 시작할 때 비동기 처리의 이점을 누릴 수 있는 지점은 이미 지나갔습니다.시작/끝 메소드를 설정하는 MVC 파이프라인은 이미 완료되었으며 보기는 동일한 요청에 대해 다시 들어갈 수 있는 방법이 없습니다.동기 처리에 갇혀 있거나 모든 데이터를 미리 검색하여 TempData 또는 렌더링을 위해 캐시하는 방법을 고안한 것 같습니다.

다른 팁

Scala의 Lift 프레임워크는 아마도 기본 콘텐츠의 렌더링을 차단하지 않지만 Comet-push를 사용하여 가져오는 데 시간이 걸릴 수 있는 해당 블록에 대한 부분 보기 콘텐츠를 제공하는 병렬 부분 작업이 있는 유일한 프레임워크일 것입니다. 에 대한 데이터.

그것을 사용하려면 병렬 노드 내부의 뷰에 있는 블록을 감싸면 됩니다.

<lift:parallel>
     //this is where Html.RenderAction("GottaFetchNetworkDataFromSomewhereView");
    //this is where Html.RenderAction("GottaFetchNetworkDataFromSomewhereView2");
  // would go
</lift:parallel>

Lift는 또한 브라우저 푸시가 '대기 중'이 되지 않도록 적절한 방식으로 http 요청을 관리하기 위해 페이지의 연결 부족을 처리합니다.

불행하게도 ASP.NET MVC는 Comet 지원이 좋지 않습니다.비동기식 컨트롤러 외에는 그다지 많은 것이 없습니다. 이는 개선되었지만 긴 폴링을 위한 Akka의 프레임워크 suspens() 메서드만큼 우아하지는 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top