Подскажите как правильно организовать защиту от переполнения очереди, суть в том чтобы очередь не кушала всю память при работе метода. Вот метод, в котором я прочитав блоки данных из файла добавляю их в очередь.
Read_Blockk(fs) это метод, который разбивает файл на куски и читает их.
Идея такая, как бы сделать так, чтобы в этом методе проверялась полнота очереди и если очередь полная то метод бы замирал, или поток в котором метод работает замирал до тех пор, пока очередь не станет свободной или в очереди не появится свободное место.Замысел такой, чтобы очередь не росла в размерах и не использовала всю память. Может есть эффективнее механизмы.
// создаем очередь c блоками данных
Queue<KeyValuePair<int, byte[]>> queue_block = new Queue<KeyValuePair<int, byte[]>>();
// добавляем в очередь считанные блоки
public static void ADD_Block_to_Queue(Queue<KeyValuePair<int,byte[]>> queue_block,Stream fs)
{
foreach (KeyValuePair<int, byte[]> block in Read_Blockk(fs))
{
queue_block.Enqueue(block);
}
}