我想了解什么是调用异步方法更新我的ViewModel时使用的最佳方法。 现在,让我们说我有这样的事情:使用MVVM模式实现异步“loadData”方法的最佳方法
查看:
private async void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
{
//Call my ViewModel method to update the data the UI is bound to
}
视图模型:
public async Task loadData()
{
this.Source = await loadStuffFromDatabaseAsync();
}
现在,我不知道这下面的一个我应该使用的方法:
1)在我LoadState的方法,使用方法:
await Task.Run(async() => { await ViewMode.loadData(); });
2)使用 Task.Run 而不等待 行动 内 loadData 方法:
await Task.Run(() => { ViewModel.loadData(); });
3)呼叫我的 loadData 方法:
await ViewModel.loadData().ConfigureAwait(false);
4)调用 loadData 方法,无需等待它在我的 View类 和使用 Task.Run 我loadData方法中:
查看:
private void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
{
ViewModel.loadData();
}
查看型号:
public async void loadData()
{
await Task.Run(async() =>
{
this.Source = await loadStuffFromDatabaseAsync();
});
}
这些认可的主要区别是什么?
另一个更有效率,我应该特别选择一个吗?
感谢您的帮助! :)
塞尔吉奥
异步void的方法,你应该遵循附加异步所有异步方法的命名约定。 – 2015-02-23 20:35:01
我认为,由于Asynch支持集成到基本代码中的是Async和Await两个词,因此我相信Reed Cosby已经告诉我们所有我们需要的东西。我们不再需要调用任务方法。 – 2015-02-23 20:51:40
@JohnPeters:事实并非如此。可能有阻塞UI线程的代码。 – Fred 2015-02-23 21:25:18