2017-09-14 4 views
0

Ich kann keine Beispiele für die Verwendung GetAsync oder PostAsync Methoden finden. Ich versuche, es zu implementieren mit:Verwendung von GetAsync oder PostAsync in 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; 
} 

und ich erhalte eine Fehlermeldung, weil ich nicht weiß, was als RestRequestAsyncHandle Argument übergeben werden müssen:

Delegate ‚Aktion < IRestResponse, RestRequestAsyncHandle> 'nimmt nicht 1 Argumente

Kann mir jemand sagen, was als RestRequestAsyncHandle übergeben werden?

Antwort

2

Ich habe Mühe, etwas Bestimmtes in der Dokumentation zu finden, aber es sieht so aus, als ob Ihr Problem mehr ist als erwartet, dass Sie eine RestRequestAsyncHandle bereitstellen müssen. Stattdessen sieht es so aus, als müssten Sie in Ihrem Rückruf eine Nachricht "mitnehmen". z:

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

Die code für RestRequestAsyncHandle zeigt, dass es eine Abort Funktion enthält, die Sie aus Ihrem Handler aufrufen können, wenn nötig.

Ich kann nicht dafür bürgen, ob dies der richtige Weg ist, Async in RestSharp zu verwenden, aber ich denke, dass dies Ihren spezifischen Fehler adressiert. @ Fildors Antwort und der Kommentar unten deuten auf eine korrektere Herangehensweise an das asynchrone Zeug als Ganzes hin.

+0

Das wäre richtig, aber *: Mixing TAP und die gute ol 'Async ist nicht viel eine gute Idee. RestClient bietet eine TAP-API - warum also nicht verwenden? – Fildor

+0

@Fildor stimme ich vollständig zu. –

2

Wenn Sie den Task-basierte async Weg gehen wollen, dann tun Sie es den ganzen Weg:

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

Kirk eine gute Erklärung gab, was Sie über die AsyncHandle in Ihrem Ansatz verfehlt, so werde ich nicht wiederhole es hier.

Mit Blick auf den Code auf Github, scheinen sie tatsächlich "unter der Haube" getan haben, was Sie versucht haben. Also würde ich das Rad nicht neu erfinden.

Verwandte Themen