Ejemplo n.º 1
0
        public void Enqueue(ByteChunk chunk)
        {
            lock (_queueLocker)
            {
                if (_closed)
                {
                    throw new InvalidOperationException("Queue is closed");
                }

                if (chunk.ChunkOrder.HasValue == false)
                {
                    throw new InvalidOperationException("Chunk must have order");
                }

                _chunks.Add(chunk.ChunkOrder.Value, chunk);

                Monitor.PulseAll(_queueLocker);
            }
        }
Ejemplo n.º 2
0
        public void Enqueue(ByteChunk chunk)
        {
            lock (_queueLocker)
            {
                if (_closed)
                {
                    throw new InvalidOperationException("Queue is closed");
                }

                if (!chunk.ChunkOrder.HasValue)
                {
                    chunk.ChunkOrder = _chunkCounter;
                }

                while (_chunks.Count >= _maxObjects)
                {
                    Monitor.Wait(_queueLocker);
                }

                _chunks.Enqueue(chunk);
                _chunkCounter++;
                Monitor.PulseAll(_queueLocker);
            }
        }