我有一个.NET 4 C#服务,它使用TPL库进行线程化.我们最近将它切换为也使用连接池,因为一个连接正在成为处理的瓶颈.
以前,我们使用lock子句来控制连接对象的线程安全性.当工作备份时,队列将作为任务存在,并且许多线程(任务)将等待lock子句.现在,在大多数情况下,线程会更快地等待数据库IO和工作进程.
但是,现在我正在使用连接池,我们遇到了一个新问题.达到最大连接数(默认为100)后,如果请求进一步连接,则会超时(请参阅池信息).发生这种情况时,会抛出一个异常,说"连接请求超时".
我的所有IDisposable都在using语句中,我正在管理我的连接.这种情况的发生是由于请求的工作量超过了池可以处理的工作量(这是预期的).我理解为什么抛出这个异常,并且知道处理它的方法.一个简单的重试感觉就像一个黑客.我也意识到我可以通过连接字符串增加超时时间,但这不是一个可靠的解决方案.在以前的设计中(没有池),工作项将因应用程序内的锁定而处理.
处理此方案以确保处理所有工作的好方法是什么?