Как использовать RestSharp с async / await
Я изо всех сил пытаюсь найти современный пример некоторого асинхронного кода C#, который использует RestSharp с async
и await
. Я знаю, что есть последнее обновление Haack но я не знаю, как использовать новые методы.
кроме того, как я могу предоставить токен отмены, чтобы операция могла быть отменена (скажем, если человек устал ждать и нажимает кнопку отмены в пользовательском интерфейсе приложения).
2 ответов
Ну, обновление, на которое ссылается Haack, было сделано мной :) поэтому позвольте мне показать вам, как его использовать, так как это на самом деле очень просто. Раньше у вас были такие методы, как ExecuteAsyncGet
это вернет пользовательский тип RestSharp с именем RestRequestAsyncHandle
. Этого типа нельзя было ожидать как async/await
работает на Task
и Task<T>
возвращаемые типы. Мой запрос pull-request добавил перегрузки к существующим асинхронным методам, которые возвращают Task<T>
экземпляров. Эти Task<T>
перегрузки имеют добавленную строку" задача", добавленную к их именам, для пример Task<T>
перегрузка ExecuteAsyncGet
называется ExecuteGetTaskAsync<T>
. Для каждого из новых Task<T>
перегрузки существует один метод, который не требует CancellationToken
быть указанным, и есть один, который делает.
Итак, теперь к фактическому примеру о том, как его использовать, который также покажет, как использовать CancellationToken
:
private static async void Main()
{
var client = new RestClient();
var request = new RestRequest("http://www.google.com");
var cancellationTokenSource = new CancellationTokenSource();
var restResponse = await client.ExecuteTaskAsync(request, cancellationTokenSource.Token);
Console.WriteLine(restResponse.Content); // Will output the HTML contents of the requested page
}
это будет использовать ExecuteTaskAsync
перегрузка, которая возвращает Task<IRestResponse>
экземпляра. Как он возвращает Task
можно использовать await
ключевое слово в этом методе и get вернул Task<T>
возвращаемый тип (в данном случае IRestResponse
).
вы можете найти код здесь:http://dotnetfiddle.net/tDtKbL
в моем случае мне пришлось вызвать Task.Подождите (), чтобы он работал правильно. Однако, я использовал версию, которая не принимает CancellationTokenSource в качестве параметра.
private static async void Main()
{
var client = new RestClient();
var request = new RestRequest("http://www.google.com");
Task<IRestResponse> t = client.ExecuteTaskAsync(request);
t.Wait();
var restResponse = await t;
Console.WriteLine(restResponse.Content); // Will output the HTML contents of the requested page
}