c # BeginGetResponse: есть ли причина асинхронно читать байты в ответном обратном вызове? - PullRequest
2 голосов
/ 19 мая 2011

Пример кода MSDN для BeginGetResponse содержит два асинхронных вызова, один для получения ответа и один для чтения из буфера ответов:

http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.begingetresponse.aspx

См. Эту строку:

// Begin the Reading of the contents of the HTML page and print it to the console.
  IAsyncResult asynchronousInputRead = responseStream.BeginRead(myRequestState.BufferRead, 0, BUFFER_SIZE, new AsyncCallback(ReadCallBack), myRequestState);

Мой вопрос: в чем здесь преимущество по сравнению с синхронным чтением?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 20 мая 2011

Вот что я понял из дальнейшего исследования: даже если обратный вызов происходит в потоке, не являющемся пользовательским интерфейсом, асинхронное чтение предотвращает блокировку этого потока.Хотя поток заблокирован, он не может быть повторно использован пулом потоков, и другой параллельный запрос может привести к тому, что пул создаст еще один поток, что повлечет за собой некоторые накладные расходы.

1 голос
/ 19 мая 2011

Я считаю, что преимущество в том, что вы все еще можете делать что-то с потоком пользовательского интерфейса после асинхронного вызова

...