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
실버 라이트인가요? 호출이 비동기이기는하지만 begin과 end getResponse는 모두 같은 스레드에서 수행되기 때문에 Silverlight에서 정확한 문제가 발생했습니다. 따라서 여러분은 무기한 차단됩니다. 그것은 질문을 구걸합니까, 왜 비동기 호출을 동기로 만들려고합니까? – Matt
배경을 더 제공 할 수 있습니까? 이 코드는 어떤 종류의 응용 프로그램에서 실행됩니까? 콘솔 앱, 실버 라이트, 서비스 프로세스 등입니까? 또한 어떤 버전의 프레임 워크입니까? 당신이 치고있는 URL은 무엇입니까? – feroze