c# - 转换/包装一个使用回调的 "classic"异步方法

标签 c# asynchronous callback async-await windows-phone-8

我正在尝试将使用回调的“经典”异步方法转换为异步/等待方法。

这是代码:

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

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

其中“data”是一个UserStateauthClient_LoginCompleted 是回调。

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

最佳答案

如果需要将异步回调包装成Task s,那么你可以使用TaskCompletionSource<T> . MSDN has the full details .

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

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

关于c# - 转换/包装一个使用回调的 "classic"异步方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13514634/

相关文章:

c# - 无法将类型 'System.Collections.Generic.List<AnonymousType#1>' 隐式转换为 'System.Collections.Generic.List<Model.tblLaborBankAccount>'

c# - Nunit 使用 .NET 3.5 测试异步代码

javascript - node.js 中的信号量 - 使用计数器变量

java - 使用 Runnable 作为回调/子程序的坏习惯?

c++ - 通过代码触发回调时抑制 GTK 信号

C# XPathSelectElement 和 xml with attribute xmlns ="http://www.w3.org/2000/09/xmldsig#"Help

c# - 从 char[] 创建不安全的字符串

c# - 为什么我会收到 RemoteCertificateNameMismatch?

Javascript:异步遍历列表列表

c++ - 在 c++ std::function 上下文中无效使用 void 表达式