我在使用msdn的演示时遇到问题
演示
关于方法updateUserName
:
public static async Task updateUserName(TextBlock userName, Boolean signIn)
{
try
{
// Open Live Connect SDK client.
LiveAuthClient LCAuth = new LiveAuthClient();
LiveLoginResult LCLoginResult = await LCAuth.InitializeAsync();
try
{
//this is never reached
LiveLoginResult loginResult = null;
if (signIn)
......
代码在 HT InitialuzeAsync()
方法上挂起,并且从不输入 try 语句。使用过实时SDK的人可以告诉我可能出了什么问题吗?该代码是演示中的直接复制粘贴,实时SDK是通过VS2012上的NuGet安装的。
我预测您正在调用Task.Wait
或Task<T>.Result
调用堆栈的更远的地方。正如我在博客上描述的那样,您正在导致死锁,因为await
正在尝试在 UI 线程上恢复。
正确的解决方案是"一路"使用await
,这是我在文章中描述的最佳实践之一。如果您认为"不能"使用await
的情况,请查看我的 async
/OOP 博客系列,其中描述了async
代码的各种代码模式,最著名的是构造函数和属性。
似乎您必须将应用与应用商店关联才能使用此功能,否则它将挂起。关联后,一切都开始工作。