How to use RestSharp with async/await

前端 未结 2 1893
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-07 23:43

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 updat

2条回答
  •  余生分开走
    2020-12-08 00:32

    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 return types. My pull-request added overloads to the existing async methods that return Task instances. These Task overloads have an added "Task" string added to their names, for example the Task overload for ExecuteAsyncGet is called ExecuteGetTaskAsync. For each of the new Task 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 instance. As it returns a Task, you can use the await keyword on this method and get returned the Task's returned type (in this case IRestResponse).

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

提交回复
热议问题