Я разбиваю операцию базы данных только для чтения на несколько частей (каждая из которых считывает подмножество очень большого объема данных, анализирует их и записывает результаты в файл на диске).
Каждый фрагмент выполняет выбор (в таблицу данных) в новом потоке .net (с использованием делегата и BeginInvoke).
Существует больше подмножеств данных, чем доступных соединений в пуле, поэтому, когда у меня заканчиваются соединения, до того, как первое будет выпущено, последующие запросы на соединение ставятся в очередь... до тех пор, пока не истечет время ожидания соединения, а затем я получаю исключение тайм-аута.
Как мне либо: A) запретить исключение соединения с тайм-аутом, когда все соединения в пуле используются, либо B) определить, что все они используются, прежде чем я даже попрошу еще одно, чтобы я мог подождать, пока одно из них не будет доступно, прежде чем запрашивать ?