Esempio n. 1
0
        public void Write(BoundedBlockingQueue <IndexedBuffer> source, Stream target)
        {
            logger.Debug("Writing started");
            var currentIndex = 0;

            foreach (var buffer in source.Consume())
            {
                var bufferIndex = buffer.Index;
                if (currentIndex == bufferIndex)
                {
                    WriteInternal(buffer, target);
                    currentIndex++;
                    continue;
                }

                if (bufferIndex > currentIndex)
                {
                    source.Add(buffer);
                }
            }
        }
        public void Process(BoundedBlockingQueue <byte[]> source, BoundedBlockingQueue <IndexedBuffer> target)
        {
            Logger.Debug("Processing started");
            var bufferFactory     = new IndexedBufferFactory();
            var waitHandlesHelper = new EventWaitHandlesHelper();

            foreach (var buffer in source.Consume())
            {
                var waitHandle    = source.AddingCompleted ? waitHandlesHelper.GetNew() : null;
                var indexedBuffer = bufferFactory.GetNext();
                scheduler.StartNew(() =>
                {
                    indexedBuffer.Data = ProcessInternal(buffer);
                    target.Add(indexedBuffer);
                    Logger.Debug($"Processed {indexedBuffer.Index}");
                }, waitHandle);
            }

            Logger.Debug("Consuming finished");
            waitHandlesHelper.WaitAll();
            target.CompleteAdding();
        }