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 语句,因此始终返回空值。

这是应该的吗?

Windows Hone 8 中 Httpwebrequest POST 中的执行流程

这是应该的吗?

是的。工作完成后,它将调用您传递的回调函数。 请参阅"异步编程模型 (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 仅提供异步请求。