2012-11-22 8 views
7

コールバックを使用する「従来の」非同期メソッドを非同期/待機メソッドに変換しようとしています。コールバックを使用する「古典的」非同期メソッドを変換/ラップする

これはコードです:

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

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

"dataは" UserStateで、authClient_LoginCompletedがコールバックです。

私はすでに非同期/待機メソッドのロジックを持っていますが、問題は、Windows PhoneでMicrosoft.Liveとの対話がコールバックを使用していることです。私は、ロジックを変更しないために、セマフォを使用するソリューションを検討しています。それは良い選択肢でしょうか?

答えて

10

非同期コールバックをTaskにラップする必要がある場合は、TaskCompletionSource<T>を使用できます。 MSDN has the full details

しかし、あなたのケースで、あなただけのUserStateパラメータなしLoginAsyncを使用することができます。

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

このリンクはTaskCompletionSourceのusegesを理解するのに非常に有用である: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 +リーダー – user1845148

関連する問題