我正在开发一个 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;
});
});
问题在于,WebAuthenticationBroker
如果不是从 UI 线程调用,它似乎不起作用。它会抛出一个有用NotImplementedException
的信息,但没有有用的错误消息。
我怎样才能打电话TryGetAuthResultFromFile
然后等待结果,然后打电话GetAuthResultFromWebAuthenticationBroker
?