【问题标题】:restsharp make multi async requestrestsharp 发出多异步请求
【发布时间】:2019-03-25 10:25:11
【问题描述】:

通过 restsharp.org 请求 API 很容易, 但是当我需要调用两个不同的 API 时,第一个请求包含代码,并且在响应第二个开始后,我认为这是不正确的, 以下是我的代码:

var client = new RestClient("http://xxx.yyy.com/");

var requestHotels = new RestRequest("api/hotelUi/home/hotelList", Method.POST);
requestHotels.AddParameter("take", "16");                                               
IRestResponse hotels = client.Execute(requestHotels); 
List<Hotel> topHotels = JsonConvert.DeserializeObject<List<Hotel>>(hotels.Content); 

var requestCities = new RestRequest("api/hotelUi/home/cityList", Method.POST);
requestCities.AddParameter("take", "16");                                                 
IRestResponse cities = client.Execute(requestCities);
List<City> topCities = JsonConvert.DeserializeObject<List<City>>(cities.Content);    

如您所见,城市请求等到酒店请求响应,但我认为它们都必须发送,并等到两个响应都返回。

我该怎么做?

【问题讨论】:

  • 您可以使用 ExecuteAsync 或 ExecuteTaskAsync 方法代替 Execute。
  • @Wokuo 怎么样?在示例中没有多重请求,我如何理解两个请求都完成了?
  • This is not specifically for RestSharp 但你可以应用它。您必须了解 async/await 才能使用建议的 RestSharp 的 ExecuteAsync 方法。

标签: c# restsharp


【解决方案1】:

cmets 是正确的,使用 ExecuteAsync(也可以反序列化数据 - 请参阅 http://restsharp.org/)和 Tasks 可能如下所示:

// Set up requests as before
var client = new RestClient("http://xxx.yyy.com/");

var requestHotels = new RestRequest("api/hotelUi/home/hotelList", Method.POST);
requestHotels.AddParameter("take", "16");  

var requestCities = new RestRequest("api/hotelUi/home/cityList", Method.POST);
requestCities.AddParameter("take", "16");     

var cancellationTokenSource = new CancellationTokenSource();

var hotelsTask = client.ExecuteTaskAsync<List<Hotel>>(requestHotels, cancellationTokenSource.Token);
var citiesTask = client.ExecuteTaskAsync<List<City>>(requestCities, cancellationTokenSource.Token);

var tasks = new List<Task> { hotelsTask, citiesTask };

// Pause execution here until both tasks are complete
await Task.WhenAll(tasks);

// Check status then use hotelsTask.Result and citiesTask.Result

【讨论】:

  • 集合初始值设定项的最佳重载 Add 方法 'List.Add(Task)' 有一些无效参数
  • client.ExecuteTaskAsync(requestHotels ,cancellationTokenSource.Token),请帮别人完成你的回答,谢谢stackoverflow.com/a/21779724/11254207
  • 我已将示例更改为使用 ExecuteAsyncTask 方法。我没有数据来测试响应,但您应该能够检查这两个任务对象并找到您需要的。
猜你喜欢
  • 2011-01-08
  • 2021-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-09
  • 1970-01-01
相关资源
最近更新 更多