J'ai du mal à trouver un exemple moderne de code C # asynchrone utilisant RestSharp avec async
et await
. Je sais qu'il y a ne récente mise à jour de Haack mais je ne sais pas comment utiliser les nouvelles méthodes.
Aussi, comment puis-je fournir un jeton d'annulation pour que l'opération puisse être annulée (par exemple, si une personne est malade d'attendre et appuie sur le bouton Annuler de l'interface utilisateur de l'application).
Eh bien, la mise à jour à laquelle Haack fait référence a été faite par moi :) Alors laissez-moi vous montrer comment l’utiliser, car c’est en fait très simple. Auparavant, vous utilisiez des méthodes telles que ExecuteAsyncGet
qui renverraient un type personnalisé RestSharp nommé RestRequestAsyncHandle
. Ce type ne pouvait pas être attendu car async/await
Fonctionnait sur les types de retour Task
et Task<T>
. Ma requête pull ajoute des surcharges aux méthodes asynchrones existantes qui renvoient des instances Task<T>
. Ces surcharges Task<T>
Ont une chaîne "Task" ajoutée à leurs noms. Par exemple, la surcharge Task<T>
Pour ExecuteAsyncGet
s'appelle ExecuteGetTaskAsync<T>
. Pour chacune des nouvelles surcharges Task<T>
, Il existe une méthode pour laquelle il n'est pas nécessaire de spécifier un CancellationToken
, et une autre qui le fait.
Passons maintenant à un exemple concret d'utilisation, qui montrera également comment utiliser un 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);
}
Ceci utilisera la surcharge ExecuteTaskAsync
qui renvoie une instance Task<IRestResponse>
. Comme il retourne un Task
, vous pouvez utiliser le mot clé await
de cette méthode et obtenir le type renvoyé par Task<T>
(Dans ce cas IRestResponse
) .
Vous pouvez trouver le code ici: http://dotnetfiddle.net/tDtKbL
Dans mon cas, j'ai dû appeler Task.Wait () pour que cela fonctionne correctement. Cependant, j'ai utilisé la version qui ne prend pas CancellationTokenSource en paramètre.
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
}