BuildIt.Config.Core.Services.AppConfigurationService.RetrieveAppConfig C# (CSharp) Method

RetrieveAppConfig() private method

private RetrieveAppConfig ( bool handleRetrievalValidation = true, bool retrieveCachedVersion = true ) : Task
handleRetrievalValidation bool
retrieveCachedVersion bool
return Task
        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()