Как использовать RestSharp с async / await
Я изо всех сил пытаюсь найти современный пример некоторого асинхронного кода C#, который использует RestSharp с async
и await
. Я знаю, что есть было последнее обновление от Haack но я не знаю, как использовать новые методы.
кроме того, как я могу предоставить токен отмены, чтобы операцию можно было отменить (скажем, если человек устал ждать и нажимает кнопку отмены в пользовательском интерфейсе приложения).
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
перегрузка, которая возвращает aTask<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 }