Поскольку BeginGetResponse / EndGetResponse связаны с подключением к конечной точке Http (серверу может потребоваться некоторое время для ответа), а BeginRead / EndRead - для чтения потенциально длинного ответа из потока ответов.
Представьте себечто ваш ответ занимает 10 секунд, чтобы произвести на сервере, и объем данных, которые он выдает, скажем, 10 МБ.
Без первой пары вызовов Begin / EndGetResponse ваш поток будет заблокирован как минимум на 10 секунд, ожидая возвращения первого байта ответа .
Без второго набора вызовов Begin / EndRead ваш поток будет заблокирован, пока вы будете читать 10 МБ данных по одному сетевому пакету за раз (помните, что пакеты TCP имеют ограниченный размер, поэтомувсе они возвращаются к клиенту через некоторое время)