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

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

client.ExecuteAsync(request, response => { Console.WriteLine(response.Content); }); 

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

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

我试过这个,但没有工作:

  public T Execute(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); }); 

}

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

有一件事……你不能返回一个异步传递的值,因为你的调用方法已经返回了。 阻止调用者直到你有结果会破坏使用ExecuteAsync的点。 在这种情况下,我将返回一个Task (假设response.Content是一个字符串):

 Task GetResponseContentAsync(...) { var tcs=new TaskCompletionSource(); client.ExecuteAsync(request, response => { tcs.SetResult(response.Content); }); return tcs.Task; } 

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

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

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

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

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

 public partial class RestClient { public Task> ExecuteAsync(IRestRequest request) { var tcs=new TaskCompletionSource>(); this.ExecuteAsync(request, response => { tcs.SetResult( Deserialize(request, response) ); }); return tcs.Task; } } 

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

 response.Content 

通过阅读代码,您可能希望使用ExecuteAsGetExecuteAsPost而不是异步实现。

或者只是执行 – 不确定客户端的确切类型。