簡體   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