异步 HttpWebRequest 不起作用

本文关键字:不起作用 HttpWebRequest 异步 | 更新日期: 2023-09-27 18:34:58

我有这段代码,它旨在进行异步调用,但事实并非如此,请看一下它,让我知道哪里出了问题。

try
{
    byte[] bytes;
    Stream objRequestStream = null;
    bytes = System.Text.Encoding.ASCII.GetBytes(GetJSONforGetMenuDetails(Id, MenuIds));
    wReq = (HttpWebRequest)WebRequest.Create(new Uri("http://" + MobileWLCUrl + urlCreateCacheAPI));
    wReq.ContentLength = bytes.Length;
    wReq.ContentType = "text/x-json";
    wReq.ServicePoint.Expect100Continue = false;
    wReq.Method = "POST";
    objRequestStream = wReq.GetRequestStream();
    objRequestStream.Write(bytes, 0, bytes.Length);
    objRequestStream.Close();
    wReq.BeginGetResponse(new AsyncCallback(FinishWebRequest), null);
    //resp = WebAccess.GetWebClient().UploadString("http://" + MobileWLCUrl + urlCreateCacheAPI, GetJSONforGetMenuDetails(Id, MenuIds));
    //EngineException.CreateLog("Cache Created (for Menus: " + MenuIds + ") in API for LocationId: " + Id);
}
catch (Exception ex) { EngineException.HandleException(ex); }
void FinishWebRequest(IAsyncResult result)
{
    WebResponse wResp = wReq.EndGetResponse(result) as WebResponse;
    StreamReader sr = new StreamReader(wResp.GetResponseStream());
    String res = sr.ReadToEnd();
    EngineException.CreateLog("Cache Created (for Menus: " + MenuIds + ") in API for LocationId: " + LocId);
}

哪里出了问题?当我调试它时,它会等待调用结束以继续,但这不应该发生。

异步 HttpWebRequest 不起作用

BeginGetResponse被记录为包含一个同步部分:

方法需要一些同步安装任务来 完成(DNS 解析、代理检测和 TCP 套接字连接、 例如(,在此方法变为异步之前。结果, 绝不应在用户界面 (UI( 线程上调用此方法 因为这可能需要一些时间,通常是几秒钟。在一些 网络代理脚本配置不正确的环境, 这可能需要 60 秒或更长时间。

除此之外,如果您在请求有时间完成之前调用FinishWebRequest(技术上,如果您调用EndGetResponse(,EndGetResponse将阻止。

这是意料之中的,因为EndGetResponse需要向您返回一个可以从中获取响应数据的对象 - 但是如果请求尚未完成,它如何返回这样的对象?