Как использовать 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
}