2014-12-01 2 views
1

차단되지 않은 GET 및 POST 요청을 만들고 싶습니다. BackgroundWorker으로 문제를 해결할 수 있었지만 작업을 사용하여이 문제를 해결하려면 도움이 필요합니다.WebClient UI 차단 기능이없는 GET/POST

public Task<string> Post(Uri uri, string data) 
{ 
    return _webClient.UploadStringTaskAsync(uri, data); 
} 

public Task<string> Get(Uri uri) 
{ 
    return _webClient.DownloadStringTaskAsync(uri); 
} 

순차적으로 실행되도록 요청해야합니다. 이것을 구현하는 적절한 방법은 무엇입니까? asyncawait 인 메소드에 플래그를 지정 하시겠습니까? Task.WaitAll()을 사용하여 각 작업을 기다리시겠습니까?

후 난 무엇의 예 : 당신은 사용할 수 있습니다

Task<string> loginTask = Post("login", data); 
// wait for webrequest to complete and make use of response string 

// use data from first request in a new request: 
Task<string> someOtherRequest = Get("details"); 
+0

당신이 한 일의 예는 컴파일되지 않습니다. Post 메서드의 첫 번째 매개 변수는 Uri이지만 대신 문자열을 전달합니다. – Zack

+0

@Zack 아이디어를 얻는 것입니다. '새 Uri (str) 만들기 ' – filur

+0

누군가가 당신을 도우려고 시간을 넣기를 원한다면 좋은 예제를 만드는 데 약간의 노력을 기울여야합니다. : \ – Zack

답변

0

await Task.Run() :

Post() 기능에

, 당신이 추가 할 수 있습니다 : 예를 들어

await Task.Run(()=> { Run_UI_Blocking_Function(); }); 

await Task.Run(()=> { PostString = Post(new Uri("url"), "data"); }); 

그리고 '오기()'기능, 당신은이를 추가 할 수 있습니다

await Task.Run(()=> { GetString = Get(new Uri("url")); }); 

당신은 당신의 전화 기능에 async를 추가 할 필요가 단지 것입니다. 다음은 완료된 예입니다.

private async void btn_PostData_Click(object sender, EventArgs e) 
{ 
    await Task.Run(()=> { PostString = Post(new Uri("url"), "data"); }); 
} 

희망이 있습니다. 정말 짧고 달콤합니다.

+0

그냥 지저분 해 보입니다. 특히 HttpClient가 이미 비동기로 연결되어있는 경우 특히 그렇습니다. – mason

+0

async를 다운로드하지만 나머지 코드가 UI 스레드를 차단하지 않습니다. 그는 코드를 게시하지 않았고 많은 다른 일을 할 수있었습니다. 이것은 그것의 주위에 얻는다. –

+1

예,하지만 지저분합니다 *. 확실히 짧고 달콤한 것으로 분류하지 않을 것입니다. 만약 당신이 HttpClient가 그것을하는 방법을 알고 있고 그것을 보여주기 위해 답을 업데이트한다면, 나는 당신에게 upvote를 줄 것이다! – mason

-1

메서드를 비동기로 표시하고 결과를 기다려야합니다.

public async Task<string> Get(Uri uri) 
     { 
     return await _webClient.DownloadStringTaskAsync(uri); 
     } 

당신은 이미 비동기 호출 배관 된 Microsoft HttpClient library를 설치하고 약간의 가벼운 무게 될 수있다.

+0

안녕하세요! 나는 그것을 알았다. 그러나 나는 그것에 관해 완전히 잊었다!. 네 말이 맞아, 내 방법은 너의 것에 비해 확실히 지저분 해. +1 –