public async Task <ProjectDefinition> InsertAsync(ProjectDefinition projectDefinition) { try { var allProjectDefinitions = await projectDefinitionsReader.GetAllProjectDefinitionsAsync(); await Semaphore.WaitAsync(); var collision = allProjectDefinitions.Any(a => a.ProjectPath.Equals(projectDefinition.ProjectPath)); if (collision) { throw new Exception($"Project at path '{projectDefinition.ProjectPath}' has already been added"); } projectDefinition.ProjectId = Guid.NewGuid(); allProjectDefinitions = allProjectDefinitions.Add(projectDefinition); await fileSystemAccessor.WriteAllText(ProjectsDefinitionStoreFile, JsonSerializer.Serialize(allProjectDefinitions)); return(projectDefinition); } finally { Semaphore.Release(); } }