static async Task Run(Dictionary <State, string> dictionary, string sourceJsonPath, string targetJsonPath) { var features = JsonSerializer.DeserializeGeo(sourceJsonPath); foreach (var stateUrl in dictionary) { var state = stateUrl.Key; RemoveStateFromFeatures(features, state); var targetPath = Path.Combine(DataLocations.TempPath, $"{state}.zip"); await Downloader.DownloadFile(targetPath, stateUrl.Value); var extractDirectory = Path.Combine(DataLocations.TempPath, $"{state}_extract"); ZipFile.ExtractToDirectory(targetPath, extractDirectory); StatisticalAreaCleaner.DeleteStatisticalAreaFiles(extractDirectory); var featureCollection = WriteState(state, IoHelpers.FindFile(extractDirectory, "shp")); features.Features.AddRange(featureCollection.Features); File.Delete(targetPath); Directory.Delete(extractDirectory, true); } features.FixBoundingBox(); JsonSerializer.SerializeGeo(features, targetJsonPath); }