繁体   English   中英

如何在异步/等待中使用 RestSharp

[英]How to use RestSharp with async/await

我正在努力寻找一些异步 C# 代码的现代示例,该代码将 RestSharp 与asyncawait 我知道Haack 最近进行了更新,但我不知道如何使用新方法。

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

嗯,Haack 所指的更新是我做的 :) 所以让我向您展示如何使用它,因为它实际上非常简单。 以前,您有像ExecuteAsyncGet这样的方法,它会返回一个名为RestRequestAsyncHandle的 RestSharp 自定义类型。 由于async/await适用于TaskTask<T>返回类型,因此无法等待此类型。 我的拉取请求向返回Task<T>实例的现有异步方法添加了重载。 这些Task<T>重载的名称中添加了一个“Task”字符串,例如ExecuteAsyncGetTask<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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM