我正在努力寻找一个使用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相关问答推荐

从没有流的EventStore中读取流不存在异常

为什么 PropertyInfo.SetValue 在此示例中不起作用以及如何使其起作用?

WinForm Task.Wait :为什么它会阻塞 UI?

无法在 Blazor Server 应用程序中触发 InputRadio 的 onchange 事件

Msbuild try 构建 msbuild.exe 而不是我的 .csproj 文件

仅使用 .NET GetBytes 方法转换有效字节而不创建问号

.NET 中两个子字符串之间的非贪婪正则表达式匹配

使用字典作为数据源绑定组合框

如何在 C# 中创建表达式树来表示String.Contains("term")?

控制台应用程序的退出时

获取 .NET Framework 目录路径

什么版本的 .NET 附带什么版本的 Windows?

操作对事务的状态无效错误和事务范围

VB.NET 与 C# 整数除法

文件按文件名模式存在

为什么会出现编译错误使用未分配的局部变量?

更改 SqlConnection 超时

使用 lambda 表达式代替 IComparer 参数

.NET 中的 java.lang.IllegalStateException?

从不同程序集中的类名中解析类型