2011-09-30 2 views
2

첫 뉴스가 기다리고있을 때 매우 흥분해서 여러 가지 방법을 생각했습니다. 이들 중 하나는 내 프레임 워크에서 여러 프레임 워크에서 수행되는 것처럼 클라이언트/서버 교환의 비동기 측면을 숨기는 데 사용하는 것입니다.연속 상태 저장/복원 알고리즘을 대체 하시겠습니까?

내가 그런 일을 작성하려합니다 :

{ 
    Page p = new Page(); 
    FormResponse response = await p.Show(); 
    var field1 = reponse.inputField["input1"]; 
    ... 
} 

내가 dev에 서버에이 코드를 작성할 수 있도록하고 싶습니다 그래서 여기에 거래이다. 당신이 p.Show() 짐작할 때 HttpResponse에 html 코드를 써서 양식이있는 페이지를 표시하고 클라이언트에게 응답을 보내면 스레드가 이며 죽지 않고 다음 명령 (FormResponse response =)에 도달하지 않습니다.

여기 내 질문 : 그런 일을하는 방법이 있습니까? 나는 코드를 자르고, 연속으로 포장하고, 우리를 위해 클로저를 만들고, p.Show()가 완료되었을 때 그것을 어딘가에 저장하도록 기다린다. 하지만 스레드가 죽을 것입니다. 그리고이 코드를 처리해야하는 Page의 submit 응답을받는 코드입니다. 그래서 나는 "기다리고있는"연속체를 복원하여 스스로 만들어야합니다.

내가 높아지고 있습니까?

편집 : 추가 정보를 정기적으로

나는 좀 더 설명 할 수 있지만, 우리는 예를해야합니다. webservice에 대한 비동기 호출을 만들고 싶다고 가정하고 대기 만 사용한 다음 웹을 호출하십시오. 웹에 페이지가 표시되지 않으면 정보가 반환되고 다음 지침을 계속 수행 할 수 있으므로 웹을 통해 다음과 같이 구성 할 수 있습니다. 클라이언트 -> 서버 A [-callwebs-> 서버 B ->] 서버 A -> 클라이언트 .

이제 웹에서 사용자 인터페이스를 표시해야한다고 상상해보십시오.이 웹을 UIwebs (여러 webapp로 호출되는 재사용 가능한 인터페이스)라고 부를 수 있습니다. UI를 표시합니다. 정보를 읽고 발신자에게 다시 보냅니다.

그래서 우리는 다음과 같은 UI 웹을 가지고 있습니다 : 클라이언트 -> 서버 A [-response_redirect-> 클라이언트 -get-> 서버 B (여기서 UIwebs는 클라이언트가 입력합니다) -response_redirect-> Client-get->] 서버 A -> 클라이언트

내가 뭘 괄호 안에 넣어하면 developper에 의한 방법으로 처리되어야한다

:

그래서 고전적인 웹을 위해, 내가 비동기 페이지 응답에 웹을 기다리는 "잠"입니다 상상할 수 하지만 UI 웹을 사용하여 클라이언트에 응답해야하므로 asp.net에 대한 페이지가 완료되고 SynchronizationContext는 기다릴 비동기 명령어가 없다고 말합니다.

실제로 웹 서버를 켜고 기다리는 즉시 코드를 실행하는 데 필요한 모든 것을 복원하는 요청을 보내는 것과 같습니다.

감사합니다, 줄리앙

답변

0

나는 문제가 무엇인지 확실하지 않다.

예를 들어 ASP.NET 비동기 페이지가있는 경우 최상위 (async void) 함수는 페이지가 불완전하다는 것을 ASP.NET에 알리고 스레드를 해제합니다.나중에, 연속은 (아마도 다른 스레드에서) 실행될 것이고 요청 컨텍스트를 복원하고 요청을 완료 할 것입니다.

async이 정확한 동작을 위해 신중하게 설계되었습니다. 특히 async voidin a recent MSDN article을 설명한대로 미완료 비동기 작업 카운트를 SynchronizationContext으로 증가시킵니다.

호스트를 실행중인 경우 (즉, ASP.NET을 사용하지 않는 경우) SynchronizationContext을 구현해야합니다. 그것은 사소한 것이나 극도로 어려운 것도 아닙니다. 이 작업이 완료되면 asyncawait은 "그냥 작동합니다". :)

응답 업데이트 대답 편집 :

await/async 단지 구문 설탕 있음을 ​​알아 두셔야합니다; 그들은 이전에는 불가능했던 것을 가능하게하지 않습니다. 그들은 단지 더 쉽게 만듭니다.

정확한 상황을 이해하면 웹 서비스에서 UI를 반환 한 다음 이에 응답해야합니다. 이것은 HTTP가 작동하는 방식을 반대로하므로 viewstate로 펑키 한 작업을해야합니다. 나는 그것에 대해 생각할 것입니다 ...

+0

나는 내 질문을 완료했습니다 :) – vans