コード例 #1
0
        protected void Dispose(bool disposing)
        {
            if (!mIsDisposed)
            {
                if (disposing)
                {
                    StopAync().Wait();

                    mTaskPoller.Dispose();
                    mTaskBuffer.Dispose();

                    if (mTaskResultQueue is IDisposable)
                    {
                        (( IDisposable )mTaskResultQueue).Dispose();
                    }

                    mTaskPoller      = null;
                    mTaskBuffer      = null;
                    mTaskResultQueue = null;

                    mTaskQueueConsumer = null;
                    mExecutorRegistry  = null;
                }

                mIsDisposed = true;
            }
        }
コード例 #2
0
        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;
        }
コード例 #3
0
        public async Task Test_CanStartStop(int repeatCycles, int timeBetweenStartStopCalls)
        {
            using (PostgreSqlTaskResultQueue rq = CreateResultQueue())
            {
                for (int i = 0; i < repeatCycles; i++)
                {
                    await rq.StartAsync();

                    Assert.IsTrue(rq.IsRunning);

                    if (timeBetweenStartStopCalls > 0)
                    {
                        await Task.Delay(timeBetweenStartStopCalls);
                    }

                    await rq.StopAsync();

                    Assert.IsFalse(rq.IsRunning);
                }
            }
        }
コード例 #4
0
        private async Task Run_PostResultTests(Func <TaskExecutionResult> rsFactory)
        {
            using (PostgreSqlTaskResultQueue rq = CreateResultQueue())
            {
                await rq.StartAsync();

                foreach (IQueuedTaskToken token in mDataSource.SeededTaskTokens)
                {
                    token.UdpateFromExecutionResult(rsFactory.Invoke());
                    int affectedRows = await rq.PostResultAsync(token);

                    Assert.AreEqual(1, affectedRows);

                    QueuedTaskResult dbResult = await mDataSource
                                                .GetQueuedTaskResultFromDbByIdAsync(token.DequeuedTask.Id);

                    dbResult.AssertMatchesResult(token
                                                 .LastQueuedTaskResult);
                }

                await rq.StopAsync();
            }
        }