How to use RestSharp with async/await

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).

86900 次浏览

好吧,Haack 提到的更新是由我做的:)那么让我向你们展示如何使用它,因为它实际上非常简单。以前,您有像 ExecuteAsyncGet这样的方法,它会返回一个名为 RestRequestAsyncHandle的 RestSharp 自定义类型。由于 async/awaitTaskTask<T>返回类型上工作,因此无法等待该类型。我的 pull-request 向返回 Task<T>实例的现有异步方法添加了重载。这些 Task<T>重载在它们的名称中添加了一个“ Task”字符串,例如,ExecuteAsyncGetTask<T>重载称为 ExecuteGetTaskAsync<T>。对于每个新的 Task<T>重载,有一个方法不需要指定 RestRequestAsyncHandle1,而有一个方法需要指定 RestRequestAsyncHandle1。

现在来看一个关于如何使用它的实际例子,它也将展示如何使用 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);
}

这将使用返回 Task<IRestResponse>实例的 ExecuteTaskAsync重载。当它返回一个 Task时,您可以在此方法上使用 await关键字并获得返回的 Task<T>类型(在本例中为 IRestResponse)。

你可以在这里找到代码: http://dotnetfiddle.net/tDtKbL

对我来说,我必须打电话给 Task。等待它正常工作。但是,我使用的版本不采用 CcellationTokenSource 作为参数。

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
}