private async Task UpdateSearchAsync <T>(ILogger log, ISearchRepository <T> searchRepositoryToUpdate, string indexNameToUpdate, string userEmail = null, bool force = false) { if (RunningJobs.Contains(nameof(UpdateSearchAsync))) { log.LogInformation("The set of running jobs already contains 'UpdateSearch'"); return; } try { await searchRepositoryToUpdate.CreateIndexIfNotExistsAsync(indexNameToUpdate); if (typeof(T) == typeof(EmployerSearchModel)) { await AddDataToIndexAsync(log); } else if (typeof(T) == typeof(SicCodeSearchModel)) { await AddDataToSicCodesIndexAsync(log); } else { throw new ArgumentException($"Type {typeof(T)} is not a valid type."); } if (force && !string.IsNullOrWhiteSpace(userEmail)) { try { await _Messenger.SendMessageAsync( "UpdateSearchIndexes complete", userEmail, "The update of the search indexes completed successfully."); } catch (Exception ex) { log.LogError(ex, "UpdateSearch: An error occurred trying to send an email"); } } } finally { RunningJobs.Remove(nameof(UpdateSearchAsync)); } }