[英]How to use RestSharp with async/await
我正在努力尋找一些異步 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
:
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.