You can use a Task<MyDataModel>
to represent the data.
static Task<MyDataModel> dataTask;
public static Task<MyDataModel> LoadDataModelAsync()
{
var ret = new MyDataModel();
await ret.Init();
return ret;
}
Kick it off in Application_Start
(or a static constructor):
dataTask = LoadDataModelAsync();
Then each of your actions that needs it can await
for it to complete:
MyDataModel data = await dataTask;
...
If it's already complete, the await
will detect that and continue (synchronously).