我在mvvmcross视图模型中有一个长时间运行的进程,希望将其改为异步(http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx)。
Xamarin的beta频道目前支持异步关键字。
以下是我当前实现异步的示例。IsBusy标志可以绑定到UI元素并显示加载消息。
这样做正确吗?
public class MyModel: MvxViewModel
{
private readonly IMyService _myService;
private bool _isBusy;
public bool IsBusy
{
get { return _isBusy; }
set { _isBusy = value; RaisePropertyChanged(() => IsBusy); ; }
}
public ICommand MyCommand
{
get
{
return new MvxCommand(DoMyCommand);
}
}
public MyModel(IMyService myService)
{
_myService = myService;
}
public async void DoMyCommand()
{
IsBusy = true;
await Task.Factory.StartNew(() =>
{
_myService.LongRunningProcess();
});
IsBusy = false;
}
}
return new MvxCommand(() => DoMyCommand());
- Chris Koiakasync
的 lambda 表达式提供了稍微不同的错误处理方式。使用() => DoMyCommand()
,任何来自DoMyCommand
的异常都会被静默地忽略。而使用async () => await DoMyCommand()
,任何来自DoMyCommand
的异常都将被视为未处理异常。 - Stephen Cleary