private async Task<AppConfiguration> RetrieveAppConfig(bool handleRetrievalValidation = true, bool retrieveCachedVersion = true)
{
return await Task.Run(async () =>
{
if (retrieveCachedVersion && await TryRetrieveCachedAppConfig()) return AppConfig;
try
{
if (getAppConfigurationAutoResetEvent.WaitOne())
{
//MK After waiting for other thread to finish retrieving the app config, check if we can return cached values
if (retrieveCachedVersion && await TryRetrieveCachedAppConfig()) return AppConfig;
var appConfigurationServerResponse = await Get();
AppConfig = CreateAppConfigurationOutOfServerResponse(appConfigurationServerResponse);
if (handleRetrievalValidation)
{
if (appConfigurationServerResponse.HasErrors)
{
await HandleRetrievedAppConfigFailure(appConfigurationServerResponse);
}
else
{
await HandleRetrievedAppConfigValidation();
}
}
//MK Cache AppConfig
if (AppConfig != null)
{
await fileCacheService.Save(AppConfig, serviceSetup.CacheExpirationTime);
}
}
}
finally
{
getAppConfigurationAutoResetEvent.Set();
}
return AppConfig;
});
}
private async Task<bool> TryRetrieveCachedAppConfig()