2012-08-27 3 views
0

HttpWebRequest을 별도의 스레드에서 실행하고 싶습니다. 예를 들어백그라운드 스레드의 HttpWebRequest

내가 가진 :

public string GetPage(string url) 
{ 
    string html = new WebClient().DownloadString(url); 
    return html; 
} 

어떻게 별도의 스레드에서 이것을 실행하는 것이 훨씬 번거 로움없이?

간단한 스레드를 시작하려고했지만 HTML을 반환하는 방법을 모릅니다.

+0

당신은 할 수 없습니다 "반환"는 필요 때마다 결과를 커밋 호출됩니다 "준비 데이터"콜백의 전자 정렬 현재 쓰레드를 블로킹하지 않고 결과; 이는 실제로 다른 스레드의 목적을 다소 상쇄합니다. –

+0

그 결과로 무엇을하고 있습니까? 배경 스레드에 넣을 수없는 이유는 무엇입니까? – BAF

답변

1

사용, "많은 번거 로움없이"그렇게하려면 C# 5.0

public async void DoWork(string url) 
{ 
    string page = await new WebClient().DownloadStringTaskAsync(url); 
    //Caller thread will not be blocked but you will be able to 
    //continue your work at this point after BG thread 
    //(executing "DownloadStringTaskAsync") has downloaded the page 

} 
+0

멋진 답변에 감사드립니다. 하지만 어떻게 반환 값을 얻을 수 있습니까? –

+0

ref 또는 out 매개 변수 사용은 어떻습니까 ?? – dalexsoto

+0

참조/출력 매개 변수가 여기에 도움이되지 않습니다. 인출은 백그라운드에서 일어나고 코드는 계속됩니다. 백그라운드 스레드의 반환 값에 대해 수행해야 할 처리를 수행하십시오. – BAF

0

"많은 번거 로움없이"가능성은 ...

옵션 : 어떤 종류의에

  • 드롭 결과 (예 : ConcurentQueue) 일종의 소비자/생산자 쌍을 구축하기 위해 동기화 콜렉션 (예 : 콜을 인수로 전달)
  • pass som 데이터가 그 새로운 스레드에서
  • 단지 프로세스 데이터 (DownloadStringCompleted 유사)이며
관련 문제