2017-09-14 2 views
0

Je ne trouve aucun exemple d'utilisation des méthodes GetAsync ou PostAsync. Je tente de le mettre en œuvre avec:Comment utiliser GetAsync ou PostAsync dans RestSharp

private static Task<IRestResponse> GetResultAsync(RestClient client, RestRequest request) 
{ 
    var taskSource = new TaskCompletionSource<IRestResponse>(); 
    client.GetAsync(request, response => 
    { 
     taskSource.SetResult(response); 
    }); 
    return taskSource.Task; 
} 

et je reçois une erreur, parce que je ne sais pas ce qui doit être passé comme RestRequestAsyncHandle argument:

Action » délégué < IRestResponse, RestRequestAsyncHandle> 'ne prend pas 1 arguments

quelqu'un peut me dire ce qui devrait être passé en RestRequestAsyncHandle?

Répondre

2

J'ai du mal à trouver quelque chose de spécifique dans la documentation, mais il semblerait que votre problème soit plus que ce que vous attendiez d'un RestRequestAsyncHandle. Au lieu de cela, il semble que vous deviez "en prendre" un dans votre rappel. par exemple:

client.GetAsync(request, (response, handle) => 
{ 
    taskSource.SetResult(response); 
}); 

Le code pour RestRequestAsyncHandle montre qu'il contient une fonction Abort que vous pouvez appeler à partir de votre gestionnaire, si nécessaire.

Je ne peux pas garantir si c'est la bonne façon d'utiliser async dans RestSharp, mais je pense que cela répond à votre erreur spécifique. La réponse et le commentaire de Fildor ci-dessous suggèrent une approche plus correcte de la substance asynchrone dans son ensemble.

+0

Ce serait correct, mais *: Mélanger TAP et le bon vieux Async n'est pas vraiment une bonne idée. RestClient fournit une API TAP - alors pourquoi ne pas l'utiliser? – Fildor

+0

@Fildor Je suis complètement d'accord. –

2

Si vous voulez marcher sur le chemin de async à base de tâches, puis le faire tout le chemin:

private static Task<IRestResponse> GetResultAsync(RestClient client, RestRequest request) 
{ 
    return client.ExecuteGetTaskAsync(request); 
} 

Kirk a donné une bonne explication que vous avez manqué de la AsyncHandle dans votre approche, je ne vais pas répétez-le ici. En regardant le code sur github, ils semblent avoir fait "sous le capot", ce que vous avez essayé. Donc je ne réinventerais pas la roue.