HttpWebRequest 콜백 메서드가 응답을받을 때까지 동기식으로 기다리는 방법

의 끝
public void RemoteInsert()  
{
        String dataSet = "dataset=" + json.ToString();  
        accessKey = mobRemoteDB.accessKey;  
        String paramaters = "?llcommand=sndmsg&" + "ak=" + accessKey +   "&command=remoteinsert&" + dataSet;  
        String url = mobRemoteDB.baseUrlForRemoteInsert + paramaters;
        HttpWebRequest webRequest = (HttpWebRequest)System.Net.WebRequest.Create(url);    
        webRequest.Method = "POST";    
        webRequest.ContentType = "application/json";  
       if (NetworkInterface.GetIsNetworkAvailable() & IsDataValid)  
        {
         webRequest.BeginGetRequestStream(newAsyncCallback(GetRequestStreamCallback),webR equest); 
        }  
}  

void GetRequestStreamCallback(IAsyncResult asynchronousResult)
    {
        HttpWebRequest webRequest = (HttpWebRequest)asynchronousResult.AsyncState;           
        webRequest.BeginGetResponse(new AsyncCallback(GetResponseCallback), webRequest);            
    }


 void GetResponseCallback(IAsyncResult asynchronousResult)
    {
        try
        {                
            HttpWebRequest webRequest = (HttpWebRequest)asynchronousResult.AsyncState;
            HttpWebResponse response = (HttpWebResponse)webRequest.EndGetResponse(asynchronousResult);
            Stream streamResponse = response.GetResponseStream();
            StreamReader streamReader = new StreamReader(streamResponse);
            JObject json_response = JObject.Parse(streamReader.ReadToEnd());
            String key = (String)json_response["ret"];
            JObject dic = (JObject)json_response["retdic"];
         }
         catch(WebException e)
         {
         }
    }

RemoteInsert () 메서드가 콜백 GetResponseCallback을 기다리도록하고 싶습니다. 나는 많은 것을 시도한 것처럼 그것을 할 수 없습니다.
어떤 시체라도 도와주세요. 이 응답이 올 때까지 메인 스레드가 다른 작업을 수행하는 것을 원하지 않습니다. 제안하십시오.
그 응답 이후에 다음 실행에 사용해야합니다.

Here My code is going like 
1. Task(A).running----await 
2.   ------------------------------->Task(B)
3                              ---------Response From Task(A)------->Task(C)

첫 번째 작업 A 완료, 작업 (C) 성공과 같이 작업 (A) 성공과 같이 구현하고 싶습니다. 다음 과제 (B)

올 라이트

질문을 이해했다면 호출 스레드에서 웹 요청을 수행하고 계속하기 전에 완료 될 때까지 기다리시겠습니까?

RemoteInsert()async / await를 사용하고 GetResponseAsync()메서드를 사용하여 한 번의 호출로 응답 개체를 가져옴으로써 메서드를 단순화 할 수 있습니다 . 이 같은:

public async Task RemoteInsert()
{
    String dataSet = "dataset=" + json.ToString();
    accessKey = mobRemoteDB.accessKey;
    String paramaters = "?llcommand=sndmsg&" + "ak=" + accessKey + "&command=remoteinsert&" + dataSet;
    String url = mobRemoteDB.baseUrlForRemoteInsert + paramaters;
    HttpWebRequest webRequest = (HttpWebRequest)System.Net.WebRequest.Create(url);
    webRequest.Method = "POST";
    webRequest.ContentType = "application/json"; 

    if (NetworkInterface.GetIsNetworkAvailable() && IsDataValid)
    {
        // Await the GetResponseAsync() call.
        using(var response = await webRequest.GetResponseAsync().ConfigureAwait(false))
        {
            // The following code will execute on the main thread.
            using (var streamResponse = response.GetResponseStream())
            {
                using (StreamReader streamReader = new StreamReader(streamResponse))
                {
                    JObject json_response = JObject.Parse(streamReader.ReadToEnd());
                    String key = (String)json_response["ret"];
                    JObject dic = (JObject)json_response["retdic"];
                }
            }
        }
    }
}

더 이상 필요하지 않으므로 다른 두 가지 방법을 잃게됩니다.

이 메서드를 호출하면 Wait () 할 수 있습니다.

RemoteInsert().Wait();

그러나 WP는이를 방지하기 위해 좋은 비동기 패턴을 적용하려고합니다. 이 경우 UI 스레드를 차단하려면 무엇이 필요합니까?

RemoteInsert ()를 호출하는 메소드에서 ... 일종의 버튼 클릭 이벤트라고 가정하겠습니다 ...이 작업을 수행 할 수 없습니까?

public async void Button_Click()
{
    // First call Remote insert, and await the result.
    // The web-request will not block the UI thread.
    await RemoteInsert();

    // This code will be executed after RemoteInsert() completes:
    ... perform additional tasks that are dependant on RemoteInsert()
}

즉, UI 스레드를 차단하는 대신 RemoteInsert () 메서드가 완료된 후에 다른 메서드를 실행합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

jmeter에서 특정 응답을받을 때까지 기다리는 방법은 무엇입니까?

분류에서Dev

콜백에 데이터가있을 때까지 기다리는 방법은 무엇입니까?

분류에서Dev

스레드에서 Google API 클라이언트에서 연결 콜백을받을 때까지 기다리는 방법

분류에서Dev

노드의 콜백 함수가 실행될 때까지 기다리는 방법

분류에서Dev

Rails select_tag에서 콜백 응답을받는 방법은 무엇입니까?

분류에서Dev

클라이언트에게 응답을 보내고 전체 기능을 즉시 종료하고 다음 콜백으로 돌아 가지 않는 방법

분류에서Dev

React Native Image Picker 콜백 함수 응답을 기다리는 방법은 무엇입니까?

분류에서Dev

콜백 메서드가 Google 마커 생성을 기다리도록 강제하는 방법

분류에서Dev

계속하기 전에 비동기 콜백 메서드를 기다리는 방법은 무엇입니까?

분류에서Dev

on_read 핸들러에서 전달 된 최종 콜백을 사용하여 비동기식으로 호출자에게 응답을 반환하는 방법은 무엇입니까?

분류에서Dev

C # WP8 : 비동기 작업 메서드를 연속적으로 호출하고 매번 새 응답을받는 방법은 무엇입니까?

분류에서Dev

콜백을 사용하여 비동기 메서드로 변환하는 방법

분류에서Dev

어떻게 자바에서 동기 방식으로 비동기 콜백을 처리하기 위해?

분류에서Dev

guzzle을 사용하여 응답 다운로드를 시작하기 전에 엄청난 HTTP 응답을받을 것임을 감지하는 방법

분류에서Dev

Node.js : 페이지가로드 될 때 새 URL로 이동하고 콜백을받는 방법은 무엇입니까?

분류에서Dev

다른 ajax의 beforeSend 이벤트에서 비동기 적으로 Ajax 콜백을 처리하는 방법은 무엇입니까?

분류에서Dev

android-카메라가 열리거나 닫힐 때 콜백을받는 방법

분류에서Dev

ES6 프록시에서 콜백이 완료 될 때까지 기다리는 방법

분류에서Dev

xhr에서 응답을받을 때까지 데이터를 안정적으로 만드는 방법은 무엇입니까?

분류에서Dev

famo.us-페이지를 매긴 스크롤 뷰가 새 페이지로 이동할 때 콜백을받는 방법은 무엇입니까?

분류에서Dev

파이썬 비동기 IO에서 콜백을받을 때까지 함수를 기다립니다.

분류에서Dev

비동기 타이머 콜백을 기다리는 방법

분류에서Dev

fancyBox에서 콜백을받는 방법

분류에서Dev

DocuSign API-사용자 인증 후 콜백 응답을받는 방법은 무엇입니까?

분류에서Dev

응답을받는 동안 내 웹 서비스를 다루고 있습니다-서버 측에서 응답을받는 방법은 무엇입니까?

분류에서Dev

응답을받는 동안 내 웹 서비스를 다루고 있습니다-서버 측에서 응답을받는 방법은 무엇입니까?

분류에서Dev

CakePHP에서 Superfeedr 콜백 응답을받을 수 없습니다.

분류에서Dev

콜백을 통해 람다에서 응답을 받고 람다가 계속 작동하도록합니다.

분류에서Dev

서블릿의 응답을 요청을받은 동일한 jsp 페이지로 리디렉션하는 방법

Related 관련 기사

  1. 1

    jmeter에서 특정 응답을받을 때까지 기다리는 방법은 무엇입니까?

  2. 2

    콜백에 데이터가있을 때까지 기다리는 방법은 무엇입니까?

  3. 3

    스레드에서 Google API 클라이언트에서 연결 콜백을받을 때까지 기다리는 방법

  4. 4

    노드의 콜백 함수가 실행될 때까지 기다리는 방법

  5. 5

    Rails select_tag에서 콜백 응답을받는 방법은 무엇입니까?

  6. 6

    클라이언트에게 응답을 보내고 전체 기능을 즉시 종료하고 다음 콜백으로 돌아 가지 않는 방법

  7. 7

    React Native Image Picker 콜백 함수 응답을 기다리는 방법은 무엇입니까?

  8. 8

    콜백 메서드가 Google 마커 생성을 기다리도록 강제하는 방법

  9. 9

    계속하기 전에 비동기 콜백 메서드를 기다리는 방법은 무엇입니까?

  10. 10

    on_read 핸들러에서 전달 된 최종 콜백을 사용하여 비동기식으로 호출자에게 응답을 반환하는 방법은 무엇입니까?

  11. 11

    C # WP8 : 비동기 작업 메서드를 연속적으로 호출하고 매번 새 응답을받는 방법은 무엇입니까?

  12. 12

    콜백을 사용하여 비동기 메서드로 변환하는 방법

  13. 13

    어떻게 자바에서 동기 방식으로 비동기 콜백을 처리하기 위해?

  14. 14

    guzzle을 사용하여 응답 다운로드를 시작하기 전에 엄청난 HTTP 응답을받을 것임을 감지하는 방법

  15. 15

    Node.js : 페이지가로드 될 때 새 URL로 이동하고 콜백을받는 방법은 무엇입니까?

  16. 16

    다른 ajax의 beforeSend 이벤트에서 비동기 적으로 Ajax 콜백을 처리하는 방법은 무엇입니까?

  17. 17

    android-카메라가 열리거나 닫힐 때 콜백을받는 방법

  18. 18

    ES6 프록시에서 콜백이 완료 될 때까지 기다리는 방법

  19. 19

    xhr에서 응답을받을 때까지 데이터를 안정적으로 만드는 방법은 무엇입니까?

  20. 20

    famo.us-페이지를 매긴 스크롤 뷰가 새 페이지로 이동할 때 콜백을받는 방법은 무엇입니까?

  21. 21

    파이썬 비동기 IO에서 콜백을받을 때까지 함수를 기다립니다.

  22. 22

    비동기 타이머 콜백을 기다리는 방법

  23. 23

    fancyBox에서 콜백을받는 방법

  24. 24

    DocuSign API-사용자 인증 후 콜백 응답을받는 방법은 무엇입니까?

  25. 25

    응답을받는 동안 내 웹 서비스를 다루고 있습니다-서버 측에서 응답을받는 방법은 무엇입니까?

  26. 26

    응답을받는 동안 내 웹 서비스를 다루고 있습니다-서버 측에서 응답을받는 방법은 무엇입니까?

  27. 27

    CakePHP에서 Superfeedr 콜백 응답을받을 수 없습니다.

  28. 28

    콜백을 통해 람다에서 응답을 받고 람다가 계속 작동하도록합니다.

  29. 29

    서블릿의 응답을 요청을받은 동일한 jsp 페이지로 리디렉션하는 방법

뜨겁다태그

보관