Example #1
0
        public virtual void Run()
        {
            CancellationToken   = new CancellationToken();
            ReadChunksQueue     = new ConcurrentQueue <IChunk>(CancellationToken, Options.MaxBuffers, Options.VerboseOutput);
            ExecutedChunksQueue = new IndexedConcurrentQueue <IChunk>(CancellationToken, Options.MaxBuffers, Options.VerboseOutput);

            var execThread = new ManagedThread(Execute, OnException);

            execThread.Start();
            var writeThread = new ManagedThread(Write, OnException);

            writeThread.Start();

            try
            {
                using (var inputStream = new FileStream(Options.Input, FileMode.Open, FileAccess.Read, FileShare.Read))
                {
                    using (var bufferedStream = new BufferedStream(inputStream, Options.ReadBufferSize))
                    {
                        ReadStream(inputStream);
                    }
                }
            }
            catch (Exception e)
            {
                OnException(e);
            }

            execThread.Join();
            writeThread.Join();

            if (ErrorOccured)
            {
                throw _exception;
            }

            ReadChunksQueue     = null;
            ExecutedChunksQueue = null;
        }
 public DelayedLimitedCollection(CancellationToken cancellationToken, int maxLength) : base(cancellationToken, maxLength)
 {
 }