我正在开发一个Windows 8运行时组件,因此公共接口不能包含Task<T>,因为它不是Windows运行时类型。
这意味着我不能将方法标记为async,并且不能在我的库中使用private async方法进行await。这导致了一些关于如何处理应用程序逻辑的混淆。
以下是我同步实现所需的方式。
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
?