相关疑难解决方法(0)

与BeginGetRequestStream/EndGetRequestStream的TaskFactory.FromAsync挂起

我有一个像这样的方法,在声明responseObject使用Task.Factory.FromAsync()时挂起

private async Task<string> post(string url, string postdata)
        {
            var request = WebRequest.Create(new Uri(url)) as HttpWebRequest;
            request.Method = "POST";

            // this works
            Task<Stream> requestStream = Task<Stream>.Factory.FromAsync(request.BeginGetRequestStream, request.EndGetRequestStream, request);
            var sw = new StreamWriter(requestStream.Result);
            byte[] data = Encoding.UTF8.GetBytes(postdata);
            await requestStream.Result.WriteAsync(data, 0, data.Length);

            // this hangs
            Task<WebResponse> responseObject = Task<WebResponse>.Factory.FromAsync(request.BeginGetResponse, request.EndGetResponse, request); // Hangs here
            // Doesn't get to here
            var responseStream = responseObject.Result.GetResponseStream();
            var sr = new StreamReader(responseStream);
            string received = await sr.ReadToEndAsync();

            return received;
}
Run Code Online (Sandbox Code Playgroud)

如果我手动运行Begin/End方法,它可以正常工作,如下所示:

        request.BeginGetRequestStream(async ar …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous windows-phone-8

4
推荐指数
1
解决办法
6929
查看次数

标签 统计

asynchronous ×1

c# ×1

windows-phone-8 ×1