Windows Hone 8 中 Httpwebrequest POST 中的执行流程
本文关键字:执行流 POST Httpwebrequest Hone Windows | 更新日期: 2023-09-27 18:30:15
例如,如果我在Windows Phone 8中有此代码
string __retS = null;
private String postRequest(String url, String postData)
{
byte[]byteData = Encoding.UTF8.GetBytes(postData);
HttpWebRequest request = null;
try
{
Uri uri = new Uri(url);
request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = byteData.Length;
// start the asynchronous operation
request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), request);
} // end try
catch (Exception)
{
}
return __retS;
}
我在这条线上放了一个断点request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), request);
.我预计执行会跳转到我的GetRequestStreamCallback
方法,但事实并非如此。它继续执行 return 语句,因此始终返回空值。
这是应该的吗?
这是应该的吗?
是的。工作完成后,它将调用您传递的回调函数。 请参阅"异步编程模型 (APM)"。 从 .Net 4.5/c# 5.0 开始,您可以使用 async/await,这有助于更轻松地编写异步代码。
var stream = await request.GetRequestStreamAsync();
//...do some work using that stream
回调是异步执行的,这意味着在分配异步方法后继续代码。( request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), request);
)WebRequest
完成后,将执行GetRequestStreamCallback
。由于如果此请求是同步的,UI 线程将被阻止,因此 Windows Phone SDK 仅提供异步请求。