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; } }
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; } }