编写一个C#程序,实现一个线程安全的对象池(Object Pool),满足以下要求:1. 对象池应支持任意类型的对象,通过泛型实现。2. 提供获取对象(GetObject)和释放对象(ReleaseObject)的方法。3. 对象池内部自动创建和维护对象实例,对象创建通过传入的Func委托完成。4. 对象池应避免重复释放同一对象,且保证多线程环境下安全使用。5. 实现IDisposable接口,确保资源正确释放。6. 添加最大对象数限制,并在获取对象超过限制时抛出异常或阻塞直到有对象被释放。要求写出完整代码,并解释其中的线程同步机制和资源管理策略。
