转换/包装使用回调的"经典"异步方法

use*_*148 7 c# asynchronous callback async-await windows-phone-8

我试图将使用回调的"经典"异步方法转换为async/await方法.

这是代码:

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

static void authClient_LoginCompleted(object sender, LoginCompletedEventArgs e)
{ ... }
Run Code Online (Sandbox Code Playgroud)

其中" data"是一个UserState,并且 authClient_LoginCompleted是回调.

我已经有了async/await方法的逻辑,问题是windows phone与Microsoft.Live的交互使用了回调.我正在考虑使用信号量的解决方案,以便不改变我的逻辑.那可能是个不错的选择?

Ste*_*ary 10

如果需要将异步回调包装到Tasks中,则可以使用TaskCompletionSource<T>.MSDN具有完整的详细信息.

但是,在您的情况下,您可以在LoginAsync没有UserState参数的情况下使用:

LiveLoginResult result = await authClient.LoginAsync(new[] { "var1", "var2" });
Run Code Online (Sandbox Code Playgroud)