Vah*_*iri 5 c# asynchronous restsharp async-await xamarin
我正在使用RestSharp来异步执行GET请求,但它永远不会结束.如果我做同样的请求同步它成功结束.我以前就像这样使用过RestSharp,它总能工作.
我究竟做错了什么?
这是异步方法:( this.Client
只是localhost)
public async Task<ServiceResponse> UpvoteArticleAsync(string source, string url)
{
var client = this.Client;
var request = new RestRequest("service/upvote/"+source+"/"+url, Method.GET) { RequestFormat = DataFormat.Json };
var cancellationTokenSource = new CancellationTokenSource();
var deserial = new JsonDeserializer();
var response = await client.ExecuteTaskAsync(request, cancellationTokenSource.Token);
return deserial.Deserialize<ServiceResponse>(response);
}
Run Code Online (Sandbox Code Playgroud)
这就是我所说的:
ServiceResponse result = await rest.UpvoteArticleAsync (this.article.Source, this.article.Url);
Run Code Online (Sandbox Code Playgroud)
正如我所说,如果我将异步方法更改为同步方法,它的工作原理如下:
public async Task<ServiceResponse> UpvoteArticleAsync(string source, string url)
{
var client = this.Client;
var request = new RestRequest("service/upvote/"+source+"/"+url, Method.GET) { RequestFormat = DataFormat.Json };
var cancellationTokenSource = new CancellationTokenSource();
var deserial = new JsonDeserializer();
var response = client.ExecuteTaskAsync(request, cancellationTokenSource.Token);
return deserial.Deserialize<ServiceResponse>(response.Result);
}
Run Code Online (Sandbox Code Playgroud)
编辑:
我用try和catch来查看是否有任何异常,但它没有抛出任何异常.
编辑2:
即使我做了同样的要求HttpWebRequest
,从System.Net
使用的异步版本时,它仍然被卡住GetResponse
:
public async Task<bool> UpvoteArticleAsync(string source, string url)
{
var request = HttpWebRequest.Create(string.Format(@"http://192.168.43.199:8080/service/upvote/{0}/{1}", source, url));
request.ContentType = "application/json";
request.Method = "GET";
using (HttpWebResponse response = await request.GetResponseAsync () as HttpWebResponse)
{
if (response.StatusCode != HttpStatusCode.OK)
Console.Out.WriteLine("Error fetching data. Server returned status code: {0}", response.StatusCode);
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
var content = reader.ReadToEnd();
if(string.IsNullOrWhiteSpace(content)) {
Console.Out.WriteLine("Response contained empty body...");
}
else {
Console.Out.WriteLine("Response Body: \r\n {0}", content);
}
}
}
return true;
}
Run Code Online (Sandbox Code Playgroud)