[英]How to use RestSharp with async/await
我正在努力寻找一些异步 C# 代码的现代示例,该代码将 RestSharp 与async
和await
。 我知道Haack 最近进行了更新,但我不知道如何使用新方法。
另外,我如何提供取消令牌以便可以取消操作(例如,如果一个人厌倦了等待并按下应用程序 UI 中的取消按钮)。
嗯,Haack 所指的更新是我做的 :) 所以让我向您展示如何使用它,因为它实际上非常简单。 以前,您有像ExecuteAsyncGet
这样的方法,它会返回一个名为RestRequestAsyncHandle
的 RestSharp 自定义类型。 由于async/await
适用于Task
和Task<T>
返回类型,因此无法等待此类型。 我的拉取请求向返回Task<T>
实例的现有异步方法添加了重载。 这些Task<T>
重载的名称中添加了一个“Task”字符串,例如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);
// 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.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
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.