仕事は周りがあるのベストプラクティス間違いないが。イベントを作成し、コンストラクタからイベントを呼び出します。
回避策は、イベントハンドラが非同期であり、イベントを呼び出さずにUIスレッドをブロックすることです。
public class IdeasViewModel : ViewModelBase {
public List<IdeaResource> IdeasList;
public IdeasViewModel() {
Initialized += OnInitialized;
Initialized(this, EventArgs.Empty);
}
private event EventHandler Initialized = delegate { };
private async void OnInitialized(object sender, EventArgs e) {
//unsubscribing from the event
Initialized += OnInitialized;
//call async
var client = new HypermediaClient();
IdeasList = await client.GetIdeasAsync();
}
}
理想的には、データロード機能は、公的に利用可能な方法
public async Task LoadDataAsync() {
var client = new HypermediaClient();
IdeasList = await client.GetIdeasAsync();
}
とビューのイベントハンドラで呼び出さであるべきです。
public class IdeasPage : ContentPage {
private IdeasViewModel viewModel;
public IdeasPage() {
//...assign variables
}
protected override void OnAppearing() {
this.Appearing += Page_Appearing;
}
private async void Page_Appearing(object sender, EventArgs e) {
//...call async code here
await viewModel.LoadDataAsync();
//unsubscribing from the event
this.Appearing -= Page_Appearing;
}
}
具体的にしてください。タスクを待って非同期データをロードすると、非同期的に関数の戻り値を取得するときと同じように – BradleyDotNET
コンテキストにはベストプラクティスはなく、良い方法はありません。 – EJoshuaS