Windows Phone异步呼叫终止

本文关键字:终止 呼叫 异步 Phone Windows | 更新日期: 2023-09-27 17:55:06

我正在为一个小型windows phone应用程序创建一个Rest通信接口,因为您不能调用SOAP web服务。接口很简单,使用JsonConverter解析json响应。

代码如下所示

    public class Communicate<RequestType,ResposeType> where ResposeType:class  where RequestType :class
{
     public async Task< ResposeType> CommunicateSvr(RequestType _parameter,string methodName,string serverIp)
     {
         String reqData = JsonConvert.SerializeObject(_parameter);
         HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, serverIp+methodName);
         request.Content = new StringContent(reqData, Encoding.UTF8, "application/json");
         HttpClient client = new HttpClient();
         client.DefaultRequestHeaders
             .Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
         HttpResponseMessage response = await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);

         if (response.StatusCode == HttpStatusCode.OK)
             return JsonConvert.DeserializeObject<ResposeType>(await response.Content.ReadAsStringAsync());
         else
             throw new Exception("Error connecting to " + serverIp+methodName+ " ! Status: " + response.StatusCode);
     }
}

我正面临一个大问题。当代码到达

HttpResponseMessage response = await 
client.SendAsync(request,HttpCompletionOption.ResponseHeadersRead);            

线程结束,终止,应用程序似乎停止了。仍在运行,但不做任何事情。我设置了两个断点,一个接一个,第二个从来没有达到。我不知道怎么了,我在网上搜索了很多,但我没有发现任何有用的东西。提前感谢,等待您的回复

在输出窗口上,我得到了以下消息:

The thread 0xdec has exited with code 259 (0x103).
The thread 0x2180 has exited with code 259 (0x103).

Windows Phone异步呼叫终止

您可能在调用堆栈的更上层调用Task.WaitTask<T>.Result,这将导致死锁,我在我的博客中解释过。在这种情况下,你的UI线程将死锁(而不是退出)。

最好的解决方法是将WaitResult更改为await