我有C#代码,并且webRequest.begingetresponse有问题。WebRequest.BeginGetResponse不能异步工作
当我尝试将它用于异步调用时,工作线程被阻塞并等待回调被调用。但是,正如我在文档中读到的,当前线程应该继续运行,并且一旦响应从服务器返回,应由另一个线程调用回调方法。
[UPDATE]实际上从服务器获取响应是当前线程被阻塞的地方,当我检查线程ID时,调用回调的线程是发送请求的线程。
任何想法可能会失踪?
这里的代码片段:
public class MyRequestState
{
public WebRequest Request;
public WebResponse Response;
public ManualResetEvent allDone = new ManualResetEvent(false);
public MyRequestState()
{
Request = null;
Response = null;
}
}
public class SendRequest
{
private void ResponseCallback(IAsyncResult result)
{
//do sth ...
state.Response = (HttpWebResponse)request.EndGetResponse(result);
//do sth ...
state.allDone.Set();
}
public void MakeWebRequestAsync(string url)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";
request.Proxy = null;
state state = new MyRequestState();
state.Request = request;
IAsyncResult result = request.BeginGetResponse(new System.AsyncCallback(ResponseCallback), state);
state.allDone.WaitOne();
}
}
请显示密码。 – Michael
这是Silverlight吗?我在silverlight中遇到了这个确切的问题,因为虽然调用是异步的,但是开始和结束getResponse都是在同一个线程上完成的,这就是为什么你无限期地被阻塞。它乞求的问题,为什么你想使异步调用同步? – Matt
你能给更多的背景吗?这个代码运行在什么样的应用程序中?它是控制台应用程序,silverlight,服务过程等?另外,该框架的哪个版本?什么是你打的网址? – feroze