private void DataLoadPool(object item) { int tryNumber = 0; while (tryNumber < _settings.CountTries) { try { using DatabaseContext dbContext = new DatabaseContext(_settings); CustomersPool cp = (CustomersPool)item; CustomerRepository customerRepository = new CustomerRepository(dbContext); foreach (Customer customer in cp.Customers) { customerRepository.AddCustomer(customer); } dbContext.SaveChanges(); AutoResetEvent autoResetEvent = (AutoResetEvent)cp.WaitHandle; autoResetEvent.Set(); tryNumber = _settings.CountTries; } catch (Exception ex) { Console.WriteLine($"Try number {tryNumber + 1} for ManagedThreadId={Thread.CurrentThread.ManagedThreadId} has fail"); Console.WriteLine($"{ex.Message}"); tryNumber++; } } }
public void LoadData() { WaitHandle[] waitHandles = new WaitHandle[_settings.CountThreads]; for (int i = 0; i < _settings.CountThreads; i++) { CustomersPool item = new CustomersPool() { Customers = _customers.Where(x => x.Id % _settings.CountThreads == i).ToList() }; waitHandles[i] = item.WaitHandle; ThreadPool.QueueUserWorkItem(DataLoadPool, item); } WaitHandle.WaitAll(waitHandles); }