Tôi đang cố gắng để hiểu được cách tiếp cận tốt nhất để sử dụng khi gọi một phương pháp async rằng cập nhật ViewModel của tôi là gì. Ngay bây giờ, chúng ta hãy nói rằng tôi có một cái gì đó như thế này:Cách tốt nhất để thực hiện một async "loadData" phương pháp sử dụng mô hình MVVM
Xem:
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();
}
Bây giờ, tôi không chắc chắn mà một trong những điều sau đây cách tiếp cận tôi nên sử dụng:
1) Trong phương pháp loadstate của tôi, sử dụng:
await Task.Run(async() => { await ViewMode.loadData(); });
2) Sử dụng Task.Run mà không cần chờ đợi loadData phương pháp bên trong Action :
await Task.Run(() => { ViewModel.loadData(); });
3) Gọi phương pháp tảiData của chúng tôi với:
await ViewModel.loadData().ConfigureAwait(false);
4) Gọi loadData phương pháp mà không cần chờ nó trong tôi Xem lớp và sử dụng Task.Run bên trong phương pháp loadData tôi:
Xem:
private void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
{
ViewModel.loadData();
}
Xem Mô hình:
public async void loadData()
{
await Task.Run(async() =>
{
this.Source = await loadStuffFromDatabaseAsync();
});
}
Sự khác biệt chính giữa các phê duyệt này là gì?
là một hiệu quả hơn rằng người khác, và tôi nên chọn một trong cụ thể không?
Cảm ơn sự giúp đỡ của bạn! :)
Sergio
async trống phương pháp này cần phải tránh, và bạn nên làm theo quy ước đặt tên của phụ Async cho tất cả các phương pháp async. –
Tôi tin rằng Reed Cosby đã dạy tất cả những gì chúng ta cần bây giờ vì sự hỗ trợ của Asynch được tích hợp vào mã cơ sở là hai từ Async và Await. Chúng tôi không còn cần gọi các phương thức Task nữa. –
@JohnPeters: Điều đó không đúng. Có thể có mã đang chặn chuỗi giao diện người dùng. – Fred