Ben*_*nCr 10 c# task-parallel-library async-await windows-8 windows-runtime
我正在开发一个Windows 8运行时组件,因此公共接口不能包含,Task<T>因为它不是Windows运行时类型.
这意味着我不能标记的方法async,不能await在private async我的库方法.这导致了一些关于如何处理我的应用程序逻辑的混淆.
这就是我如何做我想要的同步.
Result r = TryGetAuthResultFromFile();
if(r != null)
{
return r;
}
r = GetAuthResultFromWebAuthenticationBroker();
return r;
Run Code Online (Sandbox Code Playgroud)
问题是TryGetResultFrom文件是async Task<Result>方法,返回r的方法正在返回IAsyncOperation<Result>
我已经尝试过这个(这不是完整的代码,但可以看到理论,在延续中处理结果并返回它们,我必须对IAsyncOperation类型进行一些结果处理).
TryGetAuthResultFromFile().ContinueWith(x=>
{
if(x.Result != null)
{
return x.result;
}
GetAuthResultFromWebAuthenticationBroker().ContinueWith(y=>
{
return y.Result;
});
});
Run Code Online (Sandbox Code Playgroud)
这个问题是,WebAuthenticationBroker如果没有从UI线程调用它似乎不起作用.它会抛出一个有用的NotImplementedException没有有用的错误消息.
我怎么打电话TryGetAuthResultFromFile然后等待结果,然后打电话GetAuthResultFromWebAuthenticationBroker?
Ste*_*ary 15
您的界面不能使用Task/ Task<T>,但它可以使用IAsyncAction/ IAsyncOperation<T>.
如果您有一个适当调用//的包装器,您的实现可以使用Task/ .Task<T>AsAsyncActionAsAsyncOperationAsyncInfo.Run
public interface IMyInterface
{
IAsyncOperation<MyResult> MyMethod();
}
public sealed class MyClass: IMyInterface
{
private async Task<MyResult> MyMethodAsync()
{
var r = await TryGetAuthResultFromFileAsync();
if (r != null)
return r;
return await GetAuthResultFromAuthenticationBrokerAsync();
}
public IAsyncOperation<MyResult> MyMethod()
{
return MyMethodAsync().AsAsyncOperation();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4287 次 |
| 最近记录: |