Ejemplo n.º 1
0
        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++;
                }
            }
        }
Ejemplo n.º 2
0
        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);
        }