Ich versuche zu verstehen, welche Methode beim Aufrufen einer asynchronen Methode, die mein ViewModel aktualisiert, am besten ist. Gerade jetzt, sagen wir, ich so etwas wie dieses:Die beste Methode zum Implementieren einer asynchronen "loadData" -Methode mit dem MVVM-Muster
Ausblick:
private async void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
{
//Call my ViewModel method to update the data the UI is bound to
}
Ansichtsmodell:
public async Task loadData()
{
this.Source = await loadStuffFromDatabaseAsync();
}
Nun, ich bin nicht sicher, ob das eine der folgenden Ansätze sollte ich verwenden:
1) In meiner Loadstate-Methode verwenden:
await Task.Run(async() => { await ViewMode.loadData(); });
2) Verwenden Task.Run ohne die loaddata Methode innerhalb der Aktion zu warten:
await Task.Run(() => { ViewModel.loadData(); });
3) Anruf meine loadData Methode mit:
await ViewModel.loadData().ConfigureAwait(false);
4) Rufen Sie die loaddata Methode ohne es in meinem View-Klasse wartet und Task.Run in meinem loaddata-Methode verwenden:
Ausblick:
private void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
{
ViewModel.loadData();
}
Ansicht Modell:
public async void loadData()
{
await Task.Run(async() =>
{
this.Source = await loadStuffFromDatabaseAsync();
});
}
Was sind die wichtigsten Unterschiede zwischen diesen approaces sind?
Ist eine mehr effizient als die andere, und sollte ich eine speziell auswählen?
Danke für Ihre Hilfe! :)
Sergio
async Leere Methoden sollten vermieden werden, und Sie sollten die Namenskonvention von Anhängen Async auf alle Asynchron-Methoden folgen. –
Ich glaube, dass Reed Cosby uns alles gelehrt hat, dass alles, was wir jetzt brauchen, seit Asynch Unterstützung in den Basiscode integriert wurde, zwei Wörter Async und Await ist. Wir müssen die Task-Methoden nicht mehr aufrufen. –
@JohnPeters: Das ist nicht wahr. Möglicherweise gibt es Code, der den UInthread blockiert. – Fred