【发布时间】:2012-11-28 16:36:56
【问题描述】:
我正在开发一个 Windows 8 运行时组件,因此公共接口不能包含 Task<T>,因为它不是 Windows 运行时类型。
这意味着我不能将方法标记为async,也不能await 我的库中的private async 方法。这导致对如何处理我的应用程序逻辑有些困惑。
这就是我同步做我想做的事情的方式。
Result r = TryGetAuthResultFromFile();
if(r != null)
{
return r;
}
r = GetAuthResultFromWebAuthenticationBroker();
return r;
问题是 TryGetResultFrom 文件是 async Task<Result> 方法,而返回 r 的方法是返回 IAsyncOperation<Result>
我已经尝试过了(这不是完整的代码,但可以看到理论,在延续中处理结果并将它们返回,我必须对 IAsyncOperation 类型的结果进行一些处理)。
TryGetAuthResultFromFile().ContinueWith(x=>
{
if(x.Result != null)
{
return x.result;
}
GetAuthResultFromWebAuthenticationBroker().ContinueWith(y=>
{
return y.Result;
});
});
问题在于,如果不是从 UI 线程调用,WebAuthenticationBroker 似乎不起作用。它会抛出一个有用的NotImplementedException,但没有有用的错误消息。
如何调用TryGetAuthResultFromFile然后等待结果,然后再调用GetAuthResultFromWebAuthenticationBroker?
【问题讨论】:
标签: c# windows-8 windows-runtime task-parallel-library async-await