Próbuję zrozumieć, jaki jest najlepszy sposób użycia podczas wywoływania metody asynchronicznej, która aktualizuje mój ViewModel. Teraz, powiedzmy, że mam coś takiego:Najlepszy sposób implementacji asynchronicznej metody "loadData" przy użyciu wzorca MVVM
Widok:
private async void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
{
//Call my ViewModel method to update the data the UI is bound to
}
ViewModel:
public async Task loadData()
{
this.Source = await loadStuffFromDatabaseAsync();
}
Teraz nie jestem pewien których jeden z następujących podejść powinienem użyć:
1) W mojej metody LoadState, użyj:
await Task.Run(async() => { await ViewMode.loadData(); });
2) Zastosowanie Task.Run bez oczekiwania na loaddata metodę wewnątrz działaniu :
await Task.Run(() => { ViewModel.loadData(); });
3) połączeń moja metoda loadData za pomocą:
await ViewModel.loadData().ConfigureAwait(false);
4) Wywołać loaddata metoda bez oczekiwania w moim View klasy i używać Task.Run wewnątrz mojej metody loaddata:
View:
private void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
{
ViewModel.loadData();
}
Wyświetl Model:
public async void loadData()
{
await Task.Run(async() =>
{
this.Source = await loadStuffFromDatabaseAsync();
});
}
Jakie są główne różnice między tymi założeniami?
Czy jeden jest bardziej wydajny niż drugi i czy powinienem go wybrać?
Dzięki za pomoc! :)
Sergio
asynchroniczny void metod i należy postępować zgodnie z konwencją nazewnictwa dołączania ASYNC do wszystkich metod asynchronicznych. –
Wierzę, że Reed Cosby nauczył nas wszystkich, że wszystko, czego potrzebujemy teraz, ponieważ wsparcie Asynch zostało zintegrowane z kodem podstawowym to dwa słowa Async and Await. Nie musimy już wywoływać metod zadań. –
@JohnPeters: To nie prawda. Może istnieć kod blokujący wątek interfejsu użytkownika. – Fred