我正在使用MvvmCross创建PCL.我在Command中调用一个方法,通过调用Web服务来获取数据.我想异步执行此数据获取操作.如何在Command中应用异步和等待方法?
有任何想法吗?
有几种选择.
1)您可以使用async void方法/委托实现该命令.如果你这样做,我建议你有async void刚刚方法await一个Task从async Task包含实际的逻辑,因为方法async Task的方法更容易进行单元测试.此外,您还需要try/ catch以进行正确的错误处理.
2)您可以让命令只是启动一个返回的方法,Task<T>并使用NotifyTaskCompletion我的AsyncEx库将操作结果公开为属性.这允许您将数据绑定到结果以及错误.但是,AsyncEx不支持MvvmCross所做的所有平台(特别是Windows Phone 7.0和Xamarin.Mac).
更新 - 示例:
使用第一个选项:
public ICommand ContactSlodgeCommand
{
get
{
return new MvxCommand(async () =>
{
await ComposeEmailAsync("me@slodge.com", "About MvvmCross and the SQL Bits app", "I've got a question"));
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用第二个选项:
private INotifyTaskCompletion<MyResource> _resource;
public INotifyTaskCompletion<MyResource> Resource
{
get { return _resource; }
set { _resource = value; NotifyPropertyChanged(); }
}
public ICommand LoadResourceCommand
{
get
{
return new MvxCommand(() =>
{
Resource = NotifyTaskCompletion.Create(LoadResourceAsync());
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2143 次 |
| 最近记录: |