Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

I'm struggling to find a modern example of some asynchronous C# code that uses RestSharp with async and await . I know there's been a recent update by Haack but I don't know how to use the new methods.

Also, how can I provide a cancellation token so that the operation can be canceled (say, if a person is sick of waiting and presses the Cancel button in the app's UI).

Well, the update Haack is referring to has been made by me :) So let me show you how to use it, as it is actually very simple. Previously you had methods like ExecuteAsyncGet that would return a RestSharp custom type named RestRequestAsyncHandle . This type could not be awaited as async/await works on Task and Task<T> return types. My pull-request added overloads to the existing async methods that return Task<T> instances. These Task<T> overloads have an added "Task" string added to their names, for example the Task<T> overload for ExecuteAsyncGet is called ExecuteGetTaskAsync<T> . For each of the new Task<T> overloads there is one method that does not require a CancellationToken to be specified and there is one that does.

So now on to an actual example on how to use it, which will also show how to use a 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); 

This will use the ExecuteTaskAsync overload that returns a Task<IRestResponse> instance. As it returns a Task, you can use the await keyword on this method and get returned the Task<T>'s returned type (in this case IRestResponse).

You can find the code here: http://dotnetfiddle.net/tDtKbL

AH! I think I :heart: you!! (And very apt, considering it's Valentines day). This would be VERY nice to add to the RestSharp wiki. Ok, so .. any chance there's a PCL of this, also? Or am I pushing my luck? – Pure.Krome Feb 14, 2014 at 12:55 I'm not sure if a PCL version of this would work, but I will look into it in the future. And I agree it would be nice to add to the wiki, don't know if I'm allowed to edit it (I'm not a regular maintainer of the library). – Erik Schierboom Feb 14, 2014 at 13:08 Because I last used Restsharp around the same time shoulder pads were en vogue, rotary phones were the norm and we all loved hitting up our fav BBS via our Robotics 14.4k modem. Green tick of answer-approval, I shall. – Pure.Krome Jan 15, 2017 at 11:21

In my case, I had to call Task.Wait() for it to work properly. However, I used the version which does not take CancellationTokenSource as parameter.

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
                In my case calling ExecuteTaskAsynk (with or without the cancellation token) does not return and make the IIS irresponsive. I had to use this HACK until I found the cause.
– Alex 75
                Aug 9, 2017 at 17:21
                Aren't you freeing the Thread to be used elsewhere though? On a long-running operation on the other end that's beneficial, no?
– benmccallum
                Jul 20, 2018 at 14:52
        

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.