我很努力地找到一個使用RestSharp與async
和await
的一些異步C#代碼的現代示例。我知道有been a recent update by Haack,但我不知道如何使用新的方法。如何使用RestSharp與異步/等待
另外,如何提供取消令牌,以便取消操作(例如,如果有人厭倦了等待並按下應用程序UI中的取消按鈕)。
我很努力地找到一個使用RestSharp與async
和await
的一些異步C#代碼的現代示例。我知道有been a recent update by Haack,但我不知道如何使用新的方法。如何使用RestSharp與異步/等待
另外,如何提供取消令牌,以便取消操作(例如,如果有人厭倦了等待並按下應用程序UI中的取消按鈕)。
好吧,Haack所說的更新已經由我做了:)所以讓我告訴你如何使用它,因爲它實際上很簡單。以前,您有像ExecuteAsyncGet
這樣的方法會返回名爲RestRequestAsyncHandle
的RestSharp自定義類型。 async/await
適用於Task
和Task<T>
返回類型,因此無法等待此類型。我的pull請求增加了重載Task<T>
實例的現有異步方法的重載。這些Task<T>
過載具有添加到其名稱的添加的「任務」字符串,例如Task<T>
過載ExecuteAsyncGet
稱爲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);
Console.WriteLine(restResponse.Content); // Will output the HTML contents of the requested page
}
這將使用ExecuteTaskAsync
重載返回Task<IRestResponse>
實例。由於它返回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
}
通過使用'Wait',你不會利用異步代碼,你只是同步運行它。 –
在我的情況下調用ExecuteTaskAsynk(帶或不帶取消標記)不會返回並使IIS不響應。我必須使用這個HACK,直到找到原因。 –
AH!我想我:心:你! (非常適合,考慮到它是情人節)。這將非常適合添加到RestSharp wiki。好的,那麼......有沒有這種PCL的機會呢?或者我推動我的運氣? –
我不確定PCL版本是否可以工作,但我會在將來考慮它。我同意將它添加到wiki中是不錯的,不知道是否允許編輯它(我不是圖書館的定期維護者)。 –
也許我們可以在Twitter上獲得@Haacked,也許在Twitter上? –