Я хотел бы знать, какой подход среди двух является лучшей реализацией? Мне нужно создать веб-запрос, который может находиться в диапазоне от 200 мс до 5 секунд. Мне нужно, чтобы html-ответ продолжался - так что нужно блокировать основной поток..NET Threading - HttpWebRequest BeginGetResponse + AutoResetEvent
Первый подход
string GetResponse()
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
IAsyncResult result = request.BeginGetResponse(null, null);
using (HttpWebResponse httpResponse = (HttpWebResponse)request.EndGetResponse(result))
{
using (Stream dataStream = httpResponse.GetResponseStream())
{
StreamReader reader = new StreamReader(dataStream);
response = reader.ReadToEnd();
}
}
Второй подход
string response = string.Empty;
AutoResetEvent waitHandle = null;
void GetResponse(string url)
{
waitHandle = new AutoResetEvent(false);
try
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
IAsyncResult asyncResult = request.BeginGetResponse(Callback, request);
waitHandle.WaitOne();
}
catch { }
finally
{
waitHandle.Close();
}
}
void Callback(IAsyncResult asyncResult)
{
HttpWebRequest request = (HttpWebRequest)asyncResult.AsyncState;
try
{
using (HttpWebResponse httpResponse = (HttpWebResponse)request.EndGetResponse(asyncResult))
{
if (httpResponse.StatusCode == HttpStatusCode.OK)
{
using (Stream dataStream = httpResponse.GetResponseStream())
{
StreamReader reader = new StreamReader(dataStream);
response = reader.ReadToEnd();
}
}
}
}
catch { }
finally
{
waitHandle.Set();
}
}
Почему вы даже используете метод async Begin ... вместо вызова синхронизации? Или это Silverlight? –
В основном, мой вопрос должен был иметь преимущество в приведенных выше подходах в моем случае? Будет ли назначена задача для потока ввода-вывода и сокращено общее время выполнения? – user489686