Если я понимаю, что вы предлагаете, ответ: нет, изменение служб, о которых клиент говорит, что они асинхронные, не помогло бы. Клиент по-прежнему блокирует поток ЦП, пока ввод-вывод находится на сервере, независимо от того, является ли сервер асинхронным или нет.
Нет причин переключаться с HttpWebRequest
. Вы можете использовать TaskFactory::FromAsync
в .NET 4.0 для вызова HttpWebRequest::BeginGetResponse
. Это выглядит примерно так:
WebRequest myWebRequest = WebRequest.Create("http://www.stackoverflow.com");
Task<WebResponse> getResponseTask = Task<WebResponse>.Factory.FromAsync(
myWebRequest.BeginGetResponse,
myWebRequest.EndGetResponse,
null);
getResponseTask.ContinueWith(getResponseAntecedent =>
{
WebResponse webResponse = getResponseAntecedent.Result;
Stream webResponseStream = webResponse.GetResponseStream();
// read from stream async too... eventually dispose of it
});
В .NET 4.5 вы можете все еще продолжать использовать HttpWebRequest
и использовать новый метод GetResponseAsync
с новыми функциями await
в C #, чтобы превратить жизнь в черту. намного проще:
WebRequest myWebRequest = WebRequest.Create("http://www.stackoverflow.com");
using(WebResponse webResponse = await myWebRequest.GetResponseAsync())
using(Stream webResponseStream = webResponse.GetResponseStream())
{
// read from stream async, etc.
}