异步请求永远不会使用RestSharp结束

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)