如何使用asynchronous/等待的RestSharp
我正在努力寻找一些asynchronous的C#代码的一个现代的例子,它使用RestSharp与async
和await
。 我知道Haack最近有一个更新,但我不知道如何使用新的方法。
另外,如何提供取消令牌,以便取消操作(例如,如果有人厌倦了等待并按下应用程序UI中的取消button)。
那么,Haack所说的更新已经是我所做的了:)所以让我告诉你如何使用它,因为它实际上很简单。 以前,您有像ExecuteAsyncGet
这样的方法,它将返回名为RestRequestAsyncHandle
的RestSharp自定义types。 这种types不能等待async/await
在Task
和Task<T>
返回types上Task
。 我的拉取请求增加了重载Task<T>
实例的现有asynchronous方法的重载。 这些Task<T>
重载有一个添加到其名称的添加的“Task”string,例如, ExecuteAsyncGet
的Task<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 }