我正在努力寻找一些使用RestSharp和async
和的异步C#代码的现代示例await
。我知道Haack最近有更新,但是我不知道如何使用新方法。
此外,我如何提供取消令牌,以便可以取消操作(例如,如果某人厌倦了等待,并按了应用程序UI中的“取消”按钮)。
我正在努力寻找一些使用RestSharp和async
和的异步C#代码的现代示例await
。我知道Haack最近有更新,但是我不知道如何使用新方法。
此外,我如何提供取消令牌,以便可以取消操作(例如,如果某人厌倦了等待,并按了应用程序UI中的“取消”按钮)。
Answers:
好吧,Haack所指的更新是我做的:)所以,让我向您展示如何使用它,因为它实际上非常简单。以前,您有类似的方法ExecuteAsyncGet
将返回名为的RestSharp自定义类型RestRequestAsyncHandle
。不能等待此类型的async/await
工作Task
和Task<T>
返回类型。我的pull-request向返回Task<T>
实例的现有异步方法添加了重载。这些Task<T>
重载的名称中添加了一个添加的“任务”字符串,例如,名为的Task<T>
重载。对于每个新的重载,有一种方法不需要指定,而有一种方法需要指定。ExecuteAsyncGet
ExecuteGetTaskAsync<T>
Task<T>
CancellationToken
现在来看一个有关如何使用它的实际示例,该示例还将显示如何使用a 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);
}
这将使用ExecuteTaskAsync
返回Task<IRestResponse>
实例的重载。当它返回时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
}
Wait
您没有利用异步代码,您只是在同步运行它。