3

我正在尝试在 WP8 应用程序中管理 Live SDK 登录,但这里的代码有问题:

this.authClient = new LiveAuthClient("client Id");
LiveLoginResult loginResult = await this.authClient.InitializeAsync(scopes);

这是 Microsoft 提供的示例代码 ( Sample )。但是 authClient.InitializeAsync(scopes) 永远不会返回,我也没有得到任何异常。MSDN 声明 ( LiveAuthClient.InitializeAsync() ) 此方法不会在 Windows Phone 上返回值。我想用this.authClient.LoginAsync(scopes)then来管理登录,如果客户端没有初始化就不能这样做。

4

1 回答 1

6

我预测你正在调用Task<T>.ResultTask.Wait进一步调用你的调用堆栈,这将导致死锁(正如我在我的博客中解释的那样)。

默认情况下,await将捕获“当前上下文”(在这种情况下,可能是 UI 上下文),并将使用该上下文来恢复async方法的执行。如果您通过调用ResultWait在该任务上阻塞 UI 线程,则该async方法无法完成,因为它试图在阻塞的 UI 线程上完成。

于 2013-09-16T15:57:44.120 回答