У меня есть код C # и у меня проблема с webRequest.begingetresponse .
Когда я пытаюсь использовать его для асинхронного вызова , рабочий поток блокируется и ожидает вызова обратного вызова. Но, как я прочитал в документации, текущий поток должен продолжать работать, а метод обратного вызова должен вызываться другим потоком, как только ответ возвращается с сервера.
[ UPDATE ] На самом деле получение ответа от сервера - это когда текущий поток блокируется, и когда я проверяю идентификаторы потока, поток, который вызывает обратный вызов, является тем же потоком, который отправил запрос. .
Есть идеи, чего мне не хватает?
Вот фрагмент кода:
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();
}
}