如何使用asynchronous/等待的RestSharp

我正在努力寻找一些asynchronous的C#代码的一个现代的例子,它使用RestSharp与asyncawait 。 我知道Haack最近有一个更新,但我不知道如何使用新的方法。

另外,如何提供取消令牌,以便取消操作(例如,如果有人厌倦了等待并按下应用程序UI中的取消button)。

那么,Haack所说的更新已经是我所做的了:)所以让我告诉你如何使用它,因为它实际上很简单。 以前,您有像ExecuteAsyncGet这样的方法,它将返回名为RestRequestAsyncHandle的RestSharp自定义types。 这种types不能等待async/awaitTaskTask<T>返回types上Task 。 我的拉取请求增加了重载Task<T>实例的现有asynchronous方法的重载。 这些Task<T>重载有一个添加到其名称的添加的“Task”string,例如, ExecuteAsyncGetTask<T>重载称为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 } 

这将使用返回Task<IRestResponse>实例的ExecuteTaskAsync重载。 因为它返回一个Task ,所以你可以在这个方法上使用await关键字并返回Task<T>的返回types(在本例中为IRestResponse )。

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

在我的情况下,我必须调用Task.Wait()才能正常工作。 但是,我使用了不取消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 }