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).
您可能在调用堆栈的更上层调用Task.Wait
或Task<T>.Result
,这将导致死锁,我在我的博客中解释过。在这种情况下,你的UI线程将死锁(而不是退出)。
最好的解决方法是将Wait
或Result
更改为await
。