/// <summary> /// Обрабатываем базу диапазонов ip-адресов /// </summary> /// <param name="cityStream"></param> static void ProceedRanges(Stream rangeStream) { Console.Write("Загружаем диапазоны ip-адресов... "); using (DataReader reader = new DataReader(rangeStream)) { using (BlockingCollection <string[]> bc = new BlockingCollection <string[]>()) { using (Task loadTask = Task.Factory.StartNew(() => { while (reader.HasMore()) { bc.Add(reader.Next()); } bc.CompleteAdding(); })) { Action storeAction = () => { LoadService service = new LoadService(); string[] data; long start, end; string description, country; Location location = null; int locationId; while (bc.TryTake(out data)) { description = data[2]; country = data[3]; if (!long.TryParse(data[0], out start)) { Console.WriteLine("Ошибка при чтении диапазонов ip-фдресов: неверный формат начала диапазона"); Environment.Exit(1); } if (!long.TryParse(data[1], out end)) { Console.WriteLine("Ошибка при чтении диапазонов ip-фдресов: неверный формат конца диапазона"); Environment.Exit(1); } location = (data[4] != "-") && Int32.TryParse(data[4], out locationId) ? service.GetLocation(locationId) : null; service.UpdateOrCreateRange(start, end, description, country, location); } }; Parallel.Invoke(storeAction, storeAction, storeAction); } } } //string[] data; //long start, end; //string description, country; //Location location = null; //int locationId; //while (reader.HasMore()) //{ // data = reader.Next(); // description = data[2]; // country = data[3]; // if (!long.TryParse(data[0], out start)) // { // Console.WriteLine("Ошибка при чтении диапазонов ip-фдресов: неверный формат начала диапазона"); // Environment.Exit(1); // } // if (!long.TryParse(data[1], out end)) // { // Console.WriteLine("Ошибка при чтении диапазонов ip-фдресов: неверный формат конца диапазона"); // Environment.Exit(1); // } // location = (data[4] != "-") && Int32.TryParse(data[4], out locationId) ? service.GetLocation(locationId) : null; // service.UpdateOrCreateRange(start, end, description, country, location); //} Console.WriteLine("Диапазоны ip-адресов успешно загружены."); }