restsharp 发出多异步请求
restsharp make multi async request
用 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(它也可以反序列化数据 - 参见 http://restsharp.org/)与任务一起使用可能如下所示:
// 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
用 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(它也可以反序列化数据 - 参见 http://restsharp.org/)与任务一起使用可能如下所示:
// 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