Tôi muốn tải một số dữ liệu trong hàm tạo của một ViewModel nhưng do tính chất không đồng bộ của WinRT, tôi buộc phải sử dụng các phương thức không đồng bộ. Thật không may tôi không thể có một constructor async vì vậy tôi đang cố gắng sử dụng phương pháp không đồng bộ như là một phương pháp đồng bộ. Tôi chắc chắn rằng có một cách tốt hơn để tải dữ liệu (không đồng bộ) vào tải ứng dụng nhưng tâm trí của tôi là vẽ một trống vào lúc này.Tải dữ liệu không đồng bộ của WinRT trong hàm tạo
Tôi đang tìm cách sửa ứng dụng của mình bằng cách sử dụng dòng suy nghĩ tôi đang đi xuống hoặc để khắc phục sự cố này vĩnh viễn bằng phương thức phù hợp hơn.
Mã rất đơn giản (thậm chí thiếu ViewModel) chỉ để minh họa vấn đề tôi đang gặp phải.
public sealed partial class MainPage : Page
{
public string Data { get; set; }
public DataService _dataService { get; set; }
public MainPage()
{
this.InitializeComponent();
_dataService = new DataService();
var t = _dataService.GetData();
Data = t.Result;
}
/// <summary>
/// Invoked when this page is about to be displayed in a Frame.
/// </summary>
/// <param name="e">Event data that describes how this page was reached. The Parameter
/// property is typically used to configure the page.</param>
protected override void OnNavigatedTo(NavigationEventArgs e)
{
}
}
public class DataService
{
public async Task<string> GetData()
{
//Force async
await Task.Delay(1);
return "Hello";
}
}
Kind Regards
Lưu ý xử lý lỗi. Nếu 'Task' được trả về bởi phương thức khởi tạo' async' không bao giờ được quan sát, thì bất kỳ ngoại lệ nào cũng sẽ bị âm thầm nuốt chửng. Vì vậy, hãy chắc chắn để có một 'try' /' catch' trong 'InitializeAsync' của bạn hoặc có một phương thức' chờ đợi' kết quả. –
Tất nhiên. Điều này áp dụng cho dù cuộc gọi có trong bộ khởi tạo hay bất kỳ phương thức nào khác có thể dẫn đến trạng thái xấu. –