public void EnqueueForWriting(ByteBlock block) { int id = block.ID; lock (locker) { if (_isDead) { throw new InvalidOperationException("Очередь уже остановилась"); } while (id != _blockId) { Monitor.Wait(locker); } queue.Enqueue(block); _blockId++; Monitor.PulseAll(locker); } }