我正在努力寻找一个使用RestSharp asyncawait的异步C#代码的现代示例.我知道有been a recent update by Haack种,但我不知道如何使用新方法.

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

推荐答案

嗯,Haack提到的更新是由我完成的:)所以让我向您展示如何使用它,因为它实际上非常简单.以前,您有像ExecuteAsyncGet这样的方法,它们将返回名为RestRequestAsyncHandle的RestSharp自定义类型.无法等待此类型,因为async/await处理TaskTask<T>返回类型.我的Pull-Request向返回Task<T>个实例的现有异步方法添加了重载.这Task<T>个重载的名称中添加了一个"Task"字符串,例如,ExecuteAsyncGetTask<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).

你可以在这里找到代码:http://dotnetfiddle.net/tDtKbL

.net相关问答推荐

是否必须使用 Visual Studio 预览才能使用 MAUI?

IANA 到 Windows 时区映射

查找 2 个已知值之间的字符串

图像 UriSource 和数据绑定

如何将 Javascript 日期时间转换为 C# 日期时间?

如何使用 Moq 为不同的参数设置两次方法

您如何确定两个 HashSet 是否相等(按值,而不是按引用)?

抛出 ArgumentNullException

使用 Windows 服务和 C# 检测 USB 驱动器插入和移除

.Net 中的 Decimal.One、Decimal.Zero、Decimal.MinusOne 的用途是什么

在 JavaScript 中使用 String.Format?

基于多个字符分隔符拆分字符串

软件包版本始终为 1.0.0,带有 dotnet pack

非通用 TaskCompletionSource 或替代

如何将 XPath 与 XElement 或 LINQ 一起使用?

如何在 Action 中传递参数?

如何从其十六进制 RGB 字符串创建 System.Drawing.Color?

MailMessage,Sender 和 From 属性的区别

对构造函数进行单元测试重要吗?

WinForms 中的模型视图演示者