2012-11-22 13 views
7

Bir async/await yöntemine geri arama kullanan bir "klasik" eşzamansız yöntemi dönüştürmek çalışıyorum. dönüşümü kullanan bir "klasik" eşzamansız yöntemi dönüştürmek/sarmak

Bu

kodudur:

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

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

Nerede "data" bir UserState ve authClient_LoginCompleted geri arama olduğunu.

Zaten bir uyumsuzluk/bekletme yöntemleri için mantığa sahibim, sorun Microsoft.Live ile Windows telefonundaki etkileşimin geri aramaları kullanmasıdır. Sahip olduğum mantığı değiştirmemek için semafor kullanarak bir çözüm düşünüyorum. Bu iyi bir seçenek olabilir mi?

cevap

10

Eşzamansız geri aramaları Task s'ye sarmanız gerekiyorsa, TaskCompletionSource<T>'u kullanabilirsiniz. MSDN has the full details.

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

Bu bağlantı TaskCompletionSource ait useges anlamak için çok yararlıdır: http://blog.galasoft.ch/archive

Ancak, sizin durumunuzda, sadece UserState parametresi olmadan LoginAsync kullanabilirsiniz /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 + Okuyucu – user1845148