2012-11-22 7 views
7

Ich versuche, eine "klassische" asynchrone Methode, die einen Rückruf in eine async/await-Methode verwendet zu konvertieren.Convert/wrap eine "klassische" asynchrone Methode, die einen Rückruf verwendet

Dies ist der Code:

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

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

Wo "data" ist ein UserState und authClient_LoginCompleted ist der Rückruf.

Ich habe bereits die Logik für eine async/erwarten Methoden, das Problem ist, dass die Interaktion in Windows Phone mit Microsoft.Live Rückrufe verwendet. Ich denke über eine Lösung mit Semaphor nach, um die Logik, die ich habe, nicht zu ändern. Das könnte eine gute Option sein?

Antwort

10

Wenn Sie asynchrone Rückrufe in Task s umbrechen müssen, können Sie TaskCompletionSource<T> verwenden. MSDN has the full details.

jedoch in Ihrem Fall, können Sie einfach LoginAsync ohne UserState Parameter verwenden:

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

Dieser Link sehr nützlich ist, um den useges des TaskCompletionSource für das Verständnis: 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 + Leser – user1845148

Verwandte Themen