OnStartやOnVisibleプロパティを使用してSPOリストのデータをコレクションに入れたり、変数にレコードやテーブルを代入したりすることがあるかと思います。
通常、数式を並べて書くと「直列処理(1つ終わったら次へ)」となり、前の処理が終わるまで次の処理が始まりません。そのため、データ量が多いと待ち時間が積み重なってしまいます。
Concurrent関数を使うと、これを「並列処理(まとめて一気に)」に切り替えることができ、全体の待ち時間を大幅に短縮できます。
3つのデータ取得にそれぞれ1秒かかる場合、普通に書くと3秒かかりますが、Concurrentなら最短1秒(一番長い処理の時間)で終わります!
このような時にConcurrent関数を使用して、一度に処理を実行させます。
Concurrent(
// 変数へメールアドレスを代入
Set(
_UserProfile,
Office365Users.GetUserProfileV2(User().Email)
),
// コレクションにデータを代入
ClearCollect(
colProjectList,
Filter(
ProjectData,
ProjectStatus.Value="作業中"
)
)
)Concurrent関数の中では、「お互いに依存する処理」は書けません。
例えば、「変数Aに値を入れる処理」と「変数Aを使って計算する処理」を同時に入れると、計算時に変数Aが空っぽでエラーになる可能性があります。それぞれが独立した処理である場合に使いましょう。
Concurrent関数を使用することで、変数への代入とコレクションへの値の代入を同時にできるため、アプリの立ち上がりが1つ1つ行うより早くすることができます。
※Microsoft Learnでは、OnStartプロパティに重い処理を書くと、アプリのロードが完了する前にエラーが発生したり、デバッグが困難になったりする可能性があると指摘されています。
現在は、アプリの「最初の画面」の OnVisible に記述するか、Appオブジェクトの StartScreen プロパティを活用して、画面遷移と処理を切り分けるのが推奨される構成です。


