我正在尝试在WP8应用中管理Live SDK登录,并在此处遇到此代码的问题:
this.authClient = new LiveAuthClient("client Id");
LiveLoginResult loginResult = await this.authClient.InitializeAsync(scopes);
这是Microsoft提供的示例中的代码(Sample)。但是authClient.InitializeAsync(范围)永远不会返回,我也没有任何异常。 MSDN声明(LiveAuthClient.InitializeAsync())此方法不会在Windows Phone上返回值。我想使用this.authClient.LoginAsync(scopes)
然后管理登录,如果客户端没有初始化则不能这样做。
答案 0 :(得分:6)
我预测您正在调用Task<T>.Result
或Task.Wait
进一步调用您的调用堆栈,这将cause a deadlock(正如我在博客中解释的那样)。
默认情况下,await
将捕获“当前上下文”(在这种情况下,可能是UI上下文),并将使用该上下文来恢复async
方法的执行。如果通过在该任务上调用Result
或Wait
来阻止UI线程,则async
方法无法完成,因为它正在尝试在被阻止的UI线程上完成。