2009-02-23 5 views
8

비동기 적으로 웹 요청을 얻는 가장 좋은 방법은 무엇입니까?비동기 웹 요청 우수 사례

인터넷에서 페이지를 다운로드하고 싶습니다 (무엇이든 상관 없습니다) 가능한 한 스레드를 차단하지 마십시오.

이전에는 'BeginGetResponse'및 'EndGetResponse'쌍만 사용하면 충분하다고 생각했습니다. 그러나 더 정밀한 점검에 나는 또한 'BeginGetRequestStream'

[업데이트]를 사용하는 옵션이 있다는 것을 볼 GetRequestStream는 POST 작업

에 사용됩니다 그리고 내가 스트림을 사용하고있을 경우, 혼란에 추가 할 수 있습니다. BeginRead 및 EndRead?

[업데이트]article는 비동기

무엇 엉망 Stream.BeginRead

사용하여 HttpResponse.GetResponseStream를 처리하는 데에도 더 나은 제안!

나를 올바른 방향으로 안내 할 수 있습니까?

모범 사례 란 무엇입니까?

답변

0
  1. 당신은 asynchonously HTTP 응답을 기다릴/EndGetResponse 시작 사용합니다. POST를 수행하면서 많은 양의 데이터를 비동기 적으로 보내야 할 경우 Begin/EndGetRequestStream을 사용하십시오.

  2. 이것은 비동기 통신에 고유하지 않습니다. 추가 정보를 얻기 위해 동기식 버전을 조회 할 수 있습니다.

  3. 요청 스트림에서 읽기를 수행하는 이유는 확실하지 않습니다. 대개 사용자가 쓰고 응답 스트림에서 읽는 것일 수 있습니다.

마지막으로, Jeffrey Richter's blog는 HttpWebRequest를하고 스트림의 미묘한 중 일부에 대한 기사가있다.

+0

예 제가 'BeginGetRequestStream'의 목적과 혼동을 당했다고 생각합니다. –

5

이 모두 자신을 코딩 할 수 있습니다 또는 당신은 당신을 위해 고된 작업을 많이하지 웹 클라이언트를 사용할 수 있습니다. 예를 들어 파일을 문자열로 다운로드하려면 DownloadStringAsync()를 호출하면 결국 OnDowloadStringCompleted 이벤트가 트리거됩니다. 파일이 바이너리라면 DownloadDataAsync()를 대신 사용해보십시오.