Как использовать RestSharp с async / await


Я изо всех сил пытаюсь найти современный пример некоторого асинхронного кода C#, который использует RestSharp с async и await. Я знаю, что есть было последнее обновление от Haack но я не знаю, как использовать новые методы.

кроме того, как я могу предоставить токен отмены, чтобы операцию можно было отменить (скажем, если человек устал ждать и нажимает кнопку отмены в пользовательском интерфейсе приложения).

2 67

2 ответа:

Ну, обновление Haack имеет в виду было сделано мной :) так что позвольте мне показать вам, как его использовать, так как это на самом деле очень просто. Ранее у вас были такие методы, как ExecuteAsyncGet это вернет пользовательский тип RestSharp с именем RestRequestAsyncHandle. Этого типа нельзя было ожидать как async/await работает на Task и Task<T> возвращаемые типы. Мой pull-запрос добавил перегрузки к существующим асинхронным методам, которые возвращают Task<T> экземпляров. Эти Task<T> перегрузки имеют добавленную строку" Task", добавленную к их именам, для например,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 перегрузка, которая возвращает a Task<IRestResponse> экземпляра. Как он возвращает Task можно использовать await ключевое слово на этот способ и вам вернул 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
}