RestSharp ASYNC client.ExecuteAsync <T>()的示例有效

Nil*_*Pun 18 c# restsharp

有人可以帮我修改下面的代码:

client.ExecuteAsync(request, response => {
    Console.WriteLine(response.Content);
});
Run Code Online (Sandbox Code Playgroud)

基本上我想使用上面的ExecuteAsync方法但不想打印但返回给调用者的response.Content.

有没有简单的方法来实现这一目标?

我尝试了这个,但没有"工作:

    public T Execute<T>(RestRequest request) where T : new()
        {
            var client = new RestClient();
            client.BaseUrl = BaseUrl;
            client.Authenticator = new HttpBasicAuthenticator(_accountSid, _secretKey);
            request.AddParameter("AccountSid", _accountSid, ParameterType.UrlSegment); // used on every request
            var response = client.ExecuteAsync(request, response => {
    return response.data);
});
Run Code Online (Sandbox Code Playgroud)

}

以上代码来自 https://github.com/restsharp/RestSharp

spe*_*der 37

有一件事......你无法返回一个异步传递的值,因为你的调用方法已经返回了.阻止调用者直到你有结果会失败使用ExecuteAsync.在这种情况下,我会返回一个Task<string>(假设response.Content是一个字符串):

Task<string> GetResponseContentAsync(...)
{
  var tcs=new TaskCompletionSource<string>();
  client.ExecuteAsync(request, response => {
    tcs.SetResult(response.Content);
  });
  return tcs.Task;
}
Run Code Online (Sandbox Code Playgroud)

现在,当任务完成时,您有一个值.当我们转到c#5 async/await时,你应该习惯于说明异步,Task<T>因为它是非常核心的.

http://msdn.microsoft.com/en-us/library/dd537609.aspx

http://msdn.microsoft.com/en-us/library/hh191443.aspx


Bor*_*ris 5

在@spender的帮助下,这就是我得到的:

您可以在RestSharp项目中添加新文件,并添加以下代码:

public partial class RestClient
{
    public Task<IRestResponse<T>> ExecuteAsync<T>(IRestRequest request)
    {
        var tcs=new TaskCompletionSource<IRestResponse<T>>();

        this.ExecuteAsync(request, response => 
            {
                tcs.SetResult(
                    Deserialize<T>(request, response)
                );
            });

    return tcs.Task;
    }       
}
Run Code Online (Sandbox Code Playgroud)

这实际上将返回完整的响应,包括状态代码和所有内容,因此您可以在获取内容之前检查响应的状态是否正常,并且您可以获取以下内容:

response.Content
Run Code Online (Sandbox Code Playgroud)

  • 什么命名空间是`Deserialize`? (3认同)