Exemple #1
0
        public async Task StartAsync(int queuesCnt, int workersCnt)
        {
            _brocker = _brockersFabric.CreateNew(workersCnt);
            _frameQueuesRepository.Clear();
            for (int i = 0; i < queuesCnt; i++)
            {
                _frameQueuesRepository.Add(new FrameQueue(i));
            }

            _workersRepository.Clear();
            for (int i = 0; i < workersCnt; i++)
            {
                _workersRepository.Add(_workersFabric.CreateNewWorker(i));
            }

            _brocker.ConnectToWorkers(workersCnt);

            List<Task> tasks = _workersRepository.GetAll().Select(worker => worker.StartProcessingAsync(_processorCancellationTokenSource.Token)).ToList();

            var generatorTask = _dataGenerator.StartGenerationAsync(_frameQueuesRepository, _generatorCancellationTokenSource.Token);
            
            var dataProcessor = new DataProcessor(_frameQueuesRepository.GetAll(), _brocker, _workersRepository);
            var processorTask = dataProcessor.StartProcessingAsync(_processorCancellationTokenSource.Token);

            await generatorTask;
            await processorTask;
            foreach (var task in tasks)
            {
                await task;
            }
        }
Exemple #2
0
 public DataProcessor(List<FrameQueue> queues, IBrocker brocker, WorkersRepository workersRepository)
 {
     _brocker = brocker;
     _unlockedQueues = queues.ToDictionary(queue => queue.Id, queue => true);
     _queues = queues;
     foreach (var worker in workersRepository.GetAll())
     {
         worker.Ready += WorkerOnReady;
     }
 }