Windows Phone 异步调用终止
Windows Phone asynchronous call terminates
我正在为小型 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);
线程结束,终止,应用程序似乎停止了。仍然是 运行 但没有做任何事情。我一个接一个地设置了两个断点,但从未达到第二个。我不知道怎么了,我在网上搜索了很多,但没有发现任何有用的东西。提前致谢,等待您的回复
在输出 windows 上,我收到以下消息:
The thread 0xdec has exited with code 259 (0x103).
The thread 0x2180 has exited with code 259 (0x103).
你可能是我在我的博客上解释的 calling Task.Wait
or Task<T>.Result
further up your call stack, which will cause a deadlock。在这种情况下,您的 UI 线程将死锁(不退出)。
最好的解决方法是将 Wait
或 Result
更改为 await
。
我正在为小型 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);
线程结束,终止,应用程序似乎停止了。仍然是 运行 但没有做任何事情。我一个接一个地设置了两个断点,但从未达到第二个。我不知道怎么了,我在网上搜索了很多,但没有发现任何有用的东西。提前致谢,等待您的回复
在输出 windows 上,我收到以下消息:
The thread 0xdec has exited with code 259 (0x103).
The thread 0x2180 has exited with code 259 (0x103).
你可能是我在我的博客上解释的 calling Task.Wait
or Task<T>.Result
further up your call stack, which will cause a deadlock。在这种情况下,您的 UI 线程将死锁(不退出)。
最好的解决方法是将 Wait
或 Result
更改为 await
。