例如,如果我在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方法,但它并没有,而是继续执行返回语句,因此总是返回一个空值。
这是不是应该这样呢?
发布于 2013-09-06 01:16:41
应该是这样的吗?
是。当工作完成时,它将调用您传递的回调函数。参见"Asynchronous Programming Model (APM)"。从.Net 4.5 / c# 5.0开始,你可以使用async/await,它可以帮助你更简单地编写异步代码。
var stream = await request.GetRequestStreamAsync();
//...do some work using that stream发布于 2013-09-06 01:44:45
回调是异步执行的,这意味着在分配异步方法后,代码会继续执行。(request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), request);)
当WebRequest完成时,将执行GetRequestStreamCallback。因为如果此请求是同步的,UI线程将被阻塞,所以windows phone sdk只提供异步请求。
https://stackoverflow.com/questions/18641857
复制相似问题