public GherkinProcessingScheduler(IIdeTracer tracer, bool enableAnalysis)
        {
            this.tracer = tracer;

            parserQueue = new IdleTaskProcessingQueue(parsingDelay, true, tracer, DoTask);
            parserQueue.Start();

            if (enableAnalysis)
            {
                analyzerQueue = new IdleTaskProcessingQueue(analyzingDelay, false, tracer, DoTask);
                analyzerQueue.Start();
            }
        }
        public void Dispose()
        {
            if (analyzerQueue != null)
            {
                var queue = analyzerQueue;
                analyzerQueue = null; // we set the field to null first, to avoid scheduling during dispose
                queue.Dispose();
            }

            if (parserQueue != null)
            {
                var queue = parserQueue;
                parserQueue = null; // we set the field to null first, to avoid scheduling during dispose
                queue.Dispose();
            }
        }