我想通过 https 实现异步获取请求。这是分离 UI 和请求线程所必需的。这段代码可以找到,但我不确定它是否真的是异步的。请提供此代码的性能评论。
public void authHttp()
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("uri");
request.BeginGetResponse(new AsyncCallback(ReadWebRequestCallback), request);
}
private void ReadWebRequestCallback(IAsyncResult callbackResult)
{
HttpWebRequest myRequest = (HttpWebRequest)callbackResult.AsyncState;
HttpWebResponse myResponse = (HttpWebResponse)myRequest.EndGetResponse(callbackResult);
using (StreamReader httpwebStreamReader = new StreamReader(myResponse.GetResponseStream()))
{
string results = httpwebStreamReader.ReadToEnd();
//TextBlockResults.Text = results; //-- on another thread!
//Dispatcher.BeginInvoke(() => TextBlockResults.Text = results);
}
myResponse.Close();
}
最佳答案
BeginGetResponse
(我假设它是在 UI 线程上调用的)是异步的。这将在与 UI 线程不同的线程上调用 ReadWebRequestCallback
。 BeginGetResponse
使用异步 UI,因此它可能不使用“线程”来执行 IO 工作——这可能会卸载到硬件。但是,它确实使用另一个线程池线程来调用您的回调。
在回调中继续进行异步操作也是一个好主意。 ReadToEnd
是同步的。只要您阻止了用于 session 的异步 IO 子系统的线程,它就可能被阻止执行任何其他异步 IO,直到您取消阻止并从回调中返回。如果您使用的是 .NET 4.5,请查看 StreamReader.ReadtoEndAsync
。如果没有,您将不得不使用下拉到 Stream.BeginRead
并循环直到收到所有数据。
关于c# - Windows Phone C#异步获取https请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11907529/