Да, GetResponse - это блокирующий вызов (проверьте MSDN), который может вернуться только тогда, когда сервер ответит или истечет время ожидания запроса.После этого просто проверьте код состояния и используйте GetResponseStream, чтобы начать загрузку возвращаемого содержимого.Как это:
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == 200)
{
Stream content = response.GetResponseStream();
// Read the content and report the downloading progress...
...
}