У меня есть служба .NET 4 C #, которая использует библиотеки TPL для многопоточности. Недавно мы перешли на использование пула подключений, поскольку одно соединение становилось узким местом для обработки.
Ранее мы использовали предложение блокировки для управления безопасностью потока на объекте соединения. Поскольку работа будет резервироваться, очередь будет существовать в виде задач, и многие предложения (задачи) будут ожидать в предложении блокировки. Теперь в большинстве сценариев потоки ожидают ввода-вывода базы данных и работают НАМНОГО быстрее.
Однако теперь, когда я использую пул соединений, у нас появилась новая проблема. После достижения максимального количества соединений (100 по умолчанию), если запрашиваются дополнительные соединения, наступает тайм-аут (см. Информация о пуле ). Когда это происходит, генерируется исключение, говорящее «Тайм-аут запроса на соединение».
Все мои IDisposables находятся в пределах использования операторов, и я правильно управляю своими соединениями. Этот сценарий происходит из-за того, что запрашивается больше работы, чем может обработать пул (что ожидается). Я понимаю, почему выбрасывается это исключение, и знаю способы его обработки. Простая повторная попытка выглядит как хак. Я также понимаю, что могу увеличить время ожидания через строку подключения, однако это не похоже на надежное решение. В предыдущем проекте (без объединения в пул) рабочие элементы обрабатывались из-за блокировки в приложении.
Каков хороший способ обработки этого сценария для обеспечения обработки всей работы?