gpt4 book ai didi

c# - .NET 线程 - HttpWebRequest BeginGetResponse + AutoResetEvent

转载 作者:行者123 更新时间:2023-11-30 17:20:44 25 4
gpt4 key购买 nike

我想知道这两种方法中哪种方法更好?我需要创建一个 200 毫秒到 5 秒之间的 Web 请求。我需要 html 响应才能继续 - 所以需要在主线程上阻塞。

第一种方法

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();
}
}

最佳答案

为什么不在主线程上执行web请求呢?如果您希望主线程阻塞,这是迄今为止最简单的方法。

关于c# - .NET 线程 - HttpWebRequest BeginGetResponse + AutoResetEvent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4040510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com