Пример #1
0
        public static CakeMachine GetCakeMachine(DurationType durationType)
        {
            switch (durationType)
            {
            case DurationType.Seconds:
                var slowReportingDuration   = new Duration(1, durationType);
                var slowPrepareDuration     = new Duration(5, 8, durationType);
                var slowCookDuration        = new Duration(10, durationType);
                var slowPackageDuration     = new Duration(2, durationType);
                var slowDurationSettings    = new DurationSettings(slowPrepareDuration, slowCookDuration, slowPackageDuration);
                var slowReportingSettings   = new ReportingSettings(slowReportingDuration, true);
                var slowCakeMachineSettings = new CakeMachineSettings(slowDurationSettings, slowReportingSettings);
                return(new CakeMachine(slowCakeMachineSettings));

            case DurationType.Milliseconds:
                var fastReportingDuration   = new Duration(100, durationType);
                var fastPrepareDuration     = new Duration(50, 80, durationType);
                var fastCookDuration        = new Duration(70, 90, durationType);
                var fastPackageDuration     = new Duration(30, durationType);
                var fastDurationSettings    = new DurationSettings(fastPrepareDuration, fastCookDuration, fastPackageDuration);
                var fastReportingSettings   = new ReportingSettings(fastReportingDuration, true);
                var fastCakeMachineSettings = new CakeMachineSettings(fastDurationSettings, fastReportingSettings);
                return(new CakeMachine(fastCakeMachineSettings));

            default:
                throw new ArgumentOutOfRangeException($"{durationType}");
            }
        }
Пример #2
0
        public CakeMachine(CakeMachineSettings settings)
        {
            _cakes = new ConcurrentBag <Cake>();
            var durationSettings = settings.DurationSettings;

            _prepareDuration  = durationSettings.PrepareDuration;
            _cookDuration     = durationSettings.CookDuration;
            _packageDuration  = durationSettings.PackageDuration;
            _deliveryDuration = durationSettings.DeliveryDuration;
            var prepareMaxDegree = settings.ParallelismSettings.PrepareMaxDegree;
            var cookMaxDegree    = settings.ParallelismSettings.CookMaxDegree;
            var packageMaxDegree = settings.ParallelismSettings.PackageMaxDegree;

            _linkOptions = new DataflowLinkOptions {
                PropagateCompletion = true
            };
            _prepareOptions = new ExecutionDataflowBlockOptions {
                MaxDegreeOfParallelism = prepareMaxDegree
            };
            _cookOptions = new ExecutionDataflowBlockOptions {
                MaxDegreeOfParallelism = cookMaxDegree
            };
            _packageOptions = new ExecutionDataflowBlockOptions {
                MaxDegreeOfParallelism = packageMaxDegree
            };

            var reportingSettings = settings.ReportingSettings;

            if (!(reportingSettings?.IsEnabled ?? false))
            {
                return;
            }
            _reportingTimer = new ReportingTimer(reportingSettings.ReportInterval, OnReportingTimerEvent);
        }