private DispatcherQueue(string name, Dispatcher dispatcher, TaskExecutionPolicy policy, int maximumQueueDepth, double schedulingRate) { if (dispatcher == null) { throw new ArgumentNullException("dispatcher"); } if ((policy == TaskExecutionPolicy.ConstrainQueueDepthDiscardTasks || policy == TaskExecutionPolicy.ConstrainQueueDepthThrottleExecution) && maximumQueueDepth <= 0) { throw new ArgumentOutOfRangeException("maximumQueueDepth"); } if ((policy == TaskExecutionPolicy.ConstrainSchedulingRateDiscardTasks || policy == TaskExecutionPolicy.ConstrainSchedulingRateThrottleExecution) && schedulingRate <= 0.0) { throw new ArgumentOutOfRangeException("schedulingRate"); } _dispatcher = dispatcher; _name = name; _policy = policy; _maximumQueueDepth = maximumQueueDepth; _maximumSchedulingRate = schedulingRate; dispatcher.AddQueue(name, this); if (policy != TaskExecutionPolicy.Unconstrained) { _watch = Stopwatch.StartNew(); } }