Sto provando a trasformare un metodo sincrono da un vecchio codice in un metodo asincrono, ma I ' Ho qualche problema a capire. Da tutti i video e le esercitazioni che ho letto sembrano creare dei metodi, uno la funzione vera e propria, l'altro un wrapper e quindi il wrapper chiamato sull'interfaccia utente.Sto provando a trasformare un metodo sincrono da un vecchio codice in un metodo asincrono, ma ho qualche problema a capire
Ecco il mio codice:
private async Task<bool> login(String username, String password)
{
var tcs = new TaskCompletionSource<RestSharp.IRestResponse>();
RestSharp.RestRequest request = new RestSharp.RestRequest("/accounts/login/", RestSharp.Method.GET);
RestSharp.IRestResponse response = client.Execute(request);
// Make the login request
request = new RestSharp.RestRequest("/accounts/login/", RestSharp.Method.POST);
request.AddParameter("username", username);
request.AddParameter("password", password);
response = client.Execute(request);
// Return loggin status
dom = response.Content;
return dom["html"].HasClass("logged-in");
}
Per qualche ragione quando provo a chiamare il metodo sul thread UI da un clic del pulsante, mi sta chiedendo di rendere l'evento asincrono pulsante.
txtLog.AppendText("Before Await");
Task<bool> result = await login("","");
txtLog.AppendText("After Await");
txtLog.AppendText("Result: " + result.toString());
Ho bisogno di un metodo wrapper che sia anche impostato su async che rende la chiamata di accesso?
Tutto ciò sembra un po 'complesso.
Scott hai appena risposto a due domande in una per me perché stavo solo cercando di usare ExecuteAsync e mi sono confuso su come usarlo. Inoltre, stavo usando CsQuery che ha il metodo "HasClass". –
Ho apportato alcune modifiche alla versione cancellabile, è necessario notificare a 'tcs' che il lavoro è stato annullato.Ho anche aggiunto il supporto per la segnalazione di eventuali eccezioni che potrebbero essere lanciate sul callback. –
Questa risposta è utile per me. Grazie. –