public ParallelProcessingLoadBalancer( int workers, long maxScheduledSizePerWorker, int maxUnmeasuredTasksPerWorker) { if (workers <= 0) { throw new ArgumentException("At least one worker required", "workers"); } if (maxScheduledSizePerWorker <= 0) { throw new ArgumentException("maxScheduledSizePerWorker <= 0"); } if (maxUnmeasuredTasksPerWorker <= 0) { throw new ArgumentException("maxUnmeasuredTasksPerWorker <= 0"); } _workLoadEstimationStrategy = new WorkLoadEstimationStrategy( maxScheduledSizePerWorker, maxUnmeasuredTasksPerWorker); _workerState = new WorkerState[workers]; for (int index = 0; index < _workerState.Length; index++) { _workerState[index] = new WorkerState(index); } }