Если ваша единственная проблема - это время, необходимое для получения ответа, а не используемая полоса пропускания, вы можете получить ответ асинхронно.
http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.begingetresponse.aspx
Приведенный пример:немного сложно, но общая идея заключается в том, что ваша программа не будет ждать загрузки ответа при вызове BeginGetResponse, как если бы вы только что вызвали GetResponse.Первый метод, который вы передаете в BeginGetResponse, - это имя метода (называемого «обратным вызовом»), который будет вызван, когда в итоге ответ будет полностью загружен.Это место, куда вы положили бы свой код, чтобы проверить код ответа HTTP, если вы позаботились об этом.Второй параметр - это объект «состояние», который передается в ваш метод обратного вызова.Мы будем использовать это, чтобы убедиться, что все очищено должным образом.
Это будет выглядеть примерно так:
private void YourMethod()
{
// Set up your request as usual.
request.BeginGetResponse(DownloadComplete, request);
// Code down here runs immediately, without waiting for the response to download
}
private static void DownloadComplete(IAsyncResult ar)
{
var request = (HttpWebRequest)ar.AsyncState;
var response = request.EndGetResponse(ar);
// You can check your response here to make sure everything worked.
}