我有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