する質問をすることでしか得られない、回答やアドバイスがある。Xamarinでアプリの開発をしています。Storage」というプラグインを使用しているのですが、その中のメソッドのGetFilesAsyncとReadAllTextAsyncをコンストラクタで使用したいと思っています。このメソッドは非同期のもので、コンストラクタで使用することができなくて困っています。非同期メソッドで実装するしかなかった。}このようにprivateのメソッドを作り、そこに非同期処理を纏めてから、コンストラクタで使用するという方法もやってみたのですが、このListViewを表示しようとするとフリーズしてしまいました。根本的にやり方が間違っているような気がします。質問の内容以外でもおかしな所があれば、指摘していただけると嬉しいです。attachmentクリップ0気になる質問をクリップするクリップした質問は、後からいつでもマイページで確認できます。クリップした質問に回答があった際、通知やメールを受け取ることができます。自分も答えを知りたい質問者以外のユーザにも役立つ評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。質問の評価を上げたことを取り消します低評価-評価を下げられる数の上限に達しました評価を下げることができません1日5回まで評価を下げられます1日に1ユーザに対して2回まで評価を下げられます質問の評価を下げるteratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。コメントをしてください。送信する質問の評価を下げる機能の利用条件この機能を利用するためには、以下の事項を行う必要があります。件sort評価が高い順sort新着順sort古い順linkcheckベストアンサー+3コンストラクタ内のdata.Resultは結果が返ってくるまでUIスレッドを止めてしまいます。rootFolder.GetFilesAsync();が非同期に処理され、それがUIスレッドのコンテキストに戻されるけれど、すでにUIスレッドは結果待ちで止まっているのでそこできれいにデッドロックしてるかと。kekyo2さんがasync-awaitダークサイドis何にまとめられていますのでご参考にされてみてはいかがでしょうか。そちらにあるようにConfigureAwaitなどを使えばフリーズしないのではないかと思いますが、TaskをResultなどで待つことはそのスレッドを止めてしまうため基本的にはしない方がいいと思います。ちなみにそのような場合はコンストラクタは最低限のクラスの初期化だけすまして別にasyncのInitializeメソッドを設けそれを使って非同期の処理を呼び出すなども手かと思います。評価が高い回答ほどページの上位に表示されます。remove低評価0回答の評価を下げる下記のような回答は推奨されていません。評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。14:48awaitとasyncを付けていれば非同期で動いてくれるんだな、程度の理解しかなかったため、非常に参考になりました。ありがとうございます。ConfigureAwait(false)にすることで、ワーカースレッドにmakeTaskListData()を最後まで実行させることで、Resultで結果を待ってもデッドロックしなくなりました。awaitとasyncを付けていれば非同期で動いてくれるんだな、程度の理解しかなかったため、非常に参考になりました。ありがとうございます。ConfigureAwait(false)にすることで、ワーカースレッドにmakeTaskListData()を最後まで実行させることで、Resultで結果を待ってもデッドロックしなくなりました。評価が高い回答ほどページの上位に表示されます。remove低評価0回答の評価を下げる下記のような回答は推奨されていません。評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。14:40わざわざコードまでありがとうございます。Task.WhenAll知りませんでした、無駄を省けました。Task.WhenAllの戻り値が配列のタスクだったため、リストにキャストしたら動くようになりました。TaskListViewのコンストラクタをタスクで返せたのはいいのですが、TaskListViewを使う場所も別のクラスのコンストラクタなので、フリーズは回避できませんでした。コードまでありがとうございます。Task.WhenAll知りませんでした、無駄を省けました。Task.WhenAllの戻り値が配列のタスクだったため、リストにキャストしたら動くようになりました。TaskListViewのコンストラクタをタスクで返せたのはいいのですが、TaskListViewを使う場所も別のクラスのコンストラクタなので、フリーズは回避できませんでした。キャンセル完了するlink+1単なるクラスなら以下のやり方とかあると思います。1.コンストラクタで何もせずInitializeAsyncメソッドで取り込む2.staticなCreateInstanceAsyncメソッドでクラスを作って返すが、これはListView(GUI部品)なのでomanukeさんの言うように根本的な作り方としてまずいです。評価が高い回答ほどページの上位に表示されます。remove低評価0回答の評価を下げる下記のような回答は推奨されていません。評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。14:56回答ありがとうございます。GUIプログラミングとC#を勉強し始めて日が浅いため、MVVM(特にデータバインディング)がよくわかっていないです。omanukeさんの回答から動くものは完成したので、後々勉強をしながら改良していきたいと思います。回答ありがとうございます。GUIプログラミングとC#を勉強し始めて日が浅いため、MVVM(特にデータバインディング)がよくわかっていないです。omanukeさんの回答から動くものは完成したので、後々勉強をしながら改良していきたいと思います。複数回初期化されてしまう解決済ページビューの1枚目が2枚目のデータを表示する。3枚目以降になれば正しく表示される。0SurfaceViewを使用しているのですが、変数が反映されないです。頂いたご意見への回答は行っておりません。