我正在努力寻找一个现代的异步C#代码示例,该示例使用RestSharp和async
以及await
。我知道Haack最近进行了更新,但我不知道如何使用新方法。
另外,我该如何提供取消令牌,以便可以取消操作(例如,如果用户对等待感到厌烦并按下应用程序UI中的取消按钮)。
我正在努力寻找一个现代的异步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
的方法。
现在让我们来看一个实际的例子,演示如何使用它,这也将展示如何使用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
)。在我的情况下,我必须调用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
方法时,你并没有利用异步代码的优势,而只是以同步方式运行它。 - The Muffin Man