private void DoFlushingStartupSequence(IExecutionPerformanceMonitorWriter writer) { mStatsWriter = writer; mStatsProcessingStopTokenSource = new CancellationTokenSource(); mStatsProcessingTask = Task.Run(async() => await RunFlushLoopAsync()); }
public IExecutionPerformanceMonitorWriterSetup UseWriter(IExecutionPerformanceMonitorWriter writer) { if (writer == null) { throw new ArgumentNullException(nameof(writer)); } return(UseWriterFactory(() => writer)); }
private async Task DoFlushingShutdownSequenceAsync() { mStatsProcessingQueue.CompleteAdding(); mStatsProcessingStopTokenSource.Cancel(); await mStatsProcessingTask; mStatsProcessingTask.Dispose(); mStatsProcessingStopTokenSource.Dispose(); mStatsProcessingQueue.Dispose(); mStatsProcessingTask = null; mStatsProcessingQueue = null; mStatsProcessingStopTokenSource = null; mStatsWriter = null; }
public Task StartFlushingAsync(IExecutionPerformanceMonitorWriter writer) { CheckNotDisposedOrThrow(); if (mStateController.IsStopped) { mStateController.TryRequestStart(() => DoFlushingStartupSequence(writer)); } else { mLogger.Debug("Flushing is already started. Nothing to be done."); } return(Task.CompletedTask); }
public StandardTaskEngine(TaskEngineOptions engineOptions, TaskQueueOptions producerAndResultOptions, TaskQueueConsumerOptions consumerOptions, ITaskExecutorRegistry executorRegistry, IExecutionPerformanceMonitorWriter executionPerfMonWriter, ITimestampProvider timestampProvider) { if (engineOptions == null) { throw new ArgumentNullException(nameof(engineOptions)); } if (consumerOptions == null) { throw new ArgumentNullException(nameof(consumerOptions)); } if (producerAndResultOptions == null) { throw new ArgumentNullException(nameof(producerAndResultOptions)); } mExecutorRegistry = executorRegistry ?? throw new ArgumentNullException(nameof(executorRegistry)); mExecutionPerfMonWriter = executionPerfMonWriter ?? throw new ArgumentNullException(nameof(executionPerfMonWriter)); mExecutionPerfMon = new StandardExecutionPerformanceMonitor(); mTaskQueueConsumer = new PostgreSqlTaskQueueConsumer(consumerOptions, timestampProvider); mTaskQueueProducer = new PostgreSqlTaskQueueProducer(producerAndResultOptions, timestampProvider); mTaskResultQueue = new PostgreSqlTaskResultQueue(producerAndResultOptions); mTaskBuffer = new StandardTaskBuffer(engineOptions.WorkerCount); mTaskPoller = new StandardTaskPoller(engineOptions.TaskProcessingOptions, mTaskQueueConsumer, mTaskBuffer); mOptions = engineOptions; }
public ITaskEngine BuildTaskEngine() { ITaskExecutorRegistry executorRegistry = mTaskExecutorRegistrySetup .BuildTaskExecutorRegistry(); IExecutionPerformanceMonitorWriter executionPerfMonWriter = mPerformanceMonitorWriterSetup .BuildWriter(); ITimestampProvider timestampProvider = new UtcNowTimestampProvider(); TaskQueueConsumerOptions consumerOptions = mTaskQueueConsumerSetup .BuildOptions(); TaskQueueOptions producerOptions = mTaskQueueProducerSetup .BuildOptions(); StakhanoviseLogManager.Provider = mLoggingProvider ?? new NoOpLoggingProvider(); ITaskQueueProducer taskQueueProducer = new PostgreSqlTaskQueueProducer(producerOptions, timestampProvider); ITaskQueueInfo taskQueueInfo = new PostgreSqlTaskQueueInfo(mTaskQueueInfoSetup.BuildOptions(), timestampProvider); if (mRegisterOwnDependencies) { executorRegistry.LoadDependencies(new Dictionary <Type, object>() { { typeof(ITaskQueueProducer), taskQueueProducer }, { typeof(ITaskQueueInfo), taskQueueInfo } }); } return(mTaskEngineSetup.BuildTaskEngine(consumerOptions, producerOptions, executorRegistry, executionPerfMonWriter, timestampProvider)); }
public ITaskEngine BuildTaskEngine(TaskQueueConsumerOptions consumerOptions, TaskQueueOptions producerAndResultOptions, ITaskExecutorRegistry executorRegistry, IExecutionPerformanceMonitorWriter executionPerfMonWriter, ITimestampProvider timestampProvider) { if (consumerOptions == null) { throw new ArgumentNullException(nameof(consumerOptions)); } if (producerAndResultOptions == null) { throw new ArgumentNullException(nameof(producerAndResultOptions)); } if (executorRegistry == null) { throw new ArgumentNullException(nameof(executorRegistry)); } if (executionPerfMonWriter == null) { throw new ArgumentNullException(nameof(executionPerfMonWriter)); } StandardTaskEngine taskEngine = new StandardTaskEngine(BuildOptions(), producerAndResultOptions, consumerOptions, executorRegistry, executionPerfMonWriter, timestampProvider); taskEngine.ScanAssemblies(mExecutorAssemblies); return(taskEngine); }