2012-11-22 19 views
7

Sto provando a convertire un metodo asincrono "classico" che utilizza un callback in un metodo async/await.convert/wrap un metodo asincrono "classico" che utilizza una callback

Questo è il codice:

authClient.LoginCompleted += authClient_LoginCompleted; 
authClient.LoginAsync(new List<string>() { "var1", "var2" }, data); 

static void authClient_LoginCompleted(object sender, LoginCompletedEventArgs e) 
{ ... } 

Dove "data" è una UserState, e authClient_LoginCompleted è il callback.

Ho già la logica per i metodi asincrono/attendi, il problema è che l'interazione in windows phone con Microsoft.Live utilizza i callback. Sto considerando una soluzione che usa il semaforo, per non cambiare la logica che ho. Potrebbe essere una buona opzione?

risposta

10

Se è necessario eseguire il callback asincrono in Task s, è possibile utilizzare TaskCompletionSource<T>. MSDN has the full details.

Tuttavia, nel tuo caso, si può semplicemente utilizzare LoginAsync senza il parametro UserState:

LiveLoginResult result = await authClient.LoginAsync(new[] { "var1", "var2" }); 
+1

Questo legame è molto utile per comprendere le useges del TaskCompletionSource: http://blog.galasoft.ch/archive /2013/01/27/using-asyncawait-with-webclient-in-windows-phone-8-or-taskcompletionsource.aspx?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+galasoft+%28Laurent+Bugnion+%28GalaSoft%29%29&utm_content = + Google Reader – user1845148

Problemi correlati