如何使用Async / await使用RestSharp

时间:2014-02-14 12:17:30

标签: c# .net asynchronous async-await restsharp

我很难找到一些使用RestSharp asyncawait的异步C#代码的现代示例。我知道有been a recent update by Haack,但我不知道如何使用新方法。

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

2 个答案:

答案 0 :(得分:164)

嗯,Haack所指的更新是由我做的:)所以让我告诉你如何使用它,因为它实际上非常简单。以前,您有ExecuteAsyncGet之类的方法会返回名为RestRequestAsyncHandle的RestSharp自定义类型。由于async/await适用于TaskTask<T>返回类型,因此无法等待此类型。我的pull-request为返回Task<T>个实例的现有异步方法添加了重载。这些Task<T>重载会在其名称中添加添加的“任务”字符串,例如Task<T>的{​​{1}}重载称为ExecuteAsyncGet。对于每个新的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 } 实例的ExecuteTaskAsync重载。当它返回Task<IRestResponse>时,您可以在此方法上使用Task关键字,并返回await的返回类型(在本例中为Task<T>)。

您可以在此处找到代码:http://dotnetfiddle.net/tDtKbL

答案 1 :(得分:0)

就我而言,我必须调用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
}