Что ж, обновление, о котором говорит Хаак, было сделано мной :) Итак, позвольте мне показать вам, как его использовать, поскольку на самом деле это очень просто. Раньше у вас были такие методы ExecuteAsyncGet
, которые возвращали бы настраиваемый тип RestSharp с именем RestRequestAsyncHandle
. Этот тип нельзя было ожидать, поскольку он async/await
работает Task
и Task<T>
возвращает типы. Мой запрос на вытягивание добавил перегрузки к существующим асинхронным методам, которые возвращают Task<T>
экземпляры. К Task<T>
именам этих перегрузок добавлена строка «Задача», например, вызывается Task<T>
перегрузка для . Для каждой из новых перегрузок есть один метод, для которого не требуется указывать a , и есть один, который требует.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);
// Will output the HTML contents of the requested page
Console.WriteLine(restResponse.Content);
}
Это будет использовать ExecuteTaskAsync
перегрузку, возвращающую Task<IRestResponse>
экземпляр. Поскольку он возвращает a Task
, вы можете использовать await
ключевое слово в этом методе и получить Task<T>
возвращаемый тип (в данном случае IRestResponse
).
Вы можете найти код здесь: http://dotnetfiddle.net/tDtKbL
В моем случае мне пришлось вызвать Task.Wait (), чтобы он работал правильно. Однако я использовал версию, которая не принимает параметр CancellationTokenSource.
источник
Wait
вы не используете асинхронный код, вы просто запускаете его синхронно.