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); } }
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); } }