2014-02-14 107 views

回答

109

好吧,Haack所說的更新已經由我做了:)所以讓我告訴你如何使用它,因爲它實際上很簡單。以前,您有像ExecuteAsyncGet這樣的方法會返回名爲RestRequestAsyncHandle的RestSharp自定義類型。 async/await適用於TaskTask<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

+0

AH!我想我:心:你! (非常適合,考慮到它是情人節)。這將非常適合添加到RestSharp wiki。好的,那麼......有沒有這種PCL的機會呢?或者我推動我的運氣? –

+0

我不確定PCL版本是否可以工作,但我會在將來考慮它。我同意將它添加到wiki中是不錯的,不知道是否允許編輯它(我不是圖書館的定期維護者)。 –

+0

也許我們可以在Twitter上獲得@Haacked,也許在Twitter上? –

2

就我而言,我不得不打電話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 
} 
+3

通過使用'Wait',你不會利用異步代碼,你只是同步運行它。 –

+0

在我的情況下調用ExecuteTaskAsynk(帶或不帶取消標記)不會返回並使IIS不響應。我必須使用這個HACK,直到找到原因。 –