我很难找到一些使用RestSharp async
和await
的异步C#代码的现代示例。我知道有been a recent update by Haack,但我不知道如何使用新方法。
另外,我如何提供取消令牌以便取消操作(例如,如果一个人厌倦了等待并按下应用程序UI中的取消按钮)。
答案 0 :(得分:164)
嗯,Haack所指的更新是由我做的:)所以让我告诉你如何使用它,因为它实际上非常简单。以前,您有ExecuteAsyncGet
之类的方法会返回名为RestRequestAsyncHandle
的RestSharp自定义类型。由于async/await
适用于Task
和Task<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
}