C#Azure Redis缓存-无法访问已处理的对象异常
按照下面的链接在Web API中实现Redis缓存。 缓存第一次工作正常,但由于错误而失败 “无法访问已释放的对象” …在随后的阅读中 正如在上面的博客中提到的,我正在处理方法末尾的连接,并再次调用该方法,抛出上述异常: lazyConnection.Value.Dispose() 还尝试将连接属性封装在不同的类中,如本文所述。但是,由于它们被声明为静态的,所以在所有实例中保留相同的值,因此在处理连接时,在后续调用中会导致相同的异常 有几种方法可以解决此问题:C#Azure Redis缓存-无法访问已处理的对象异常,c#,azure,caching,redis,stackexchange.redis,C#,Azure,Caching,Redis,Stackexchange.redis,按照下面的链接在Web API中实现Redis缓存。 缓存第一次工作正常,但由于错误而失败 “无法访问已释放的对象” …在随后的阅读中 正如在上面的博客中提到的,我正在处理方法末尾的连接,并再次调用该方法,抛出上述异常: lazyConnection.Value.Dispose() 还尝试将连接属性封装在不同的类中,如本文所述。但是,由于它们被声明为静态的,所以在所有实例中保留相同的值,因此在处理连接时,在后续调用中会导致相同的异常 有几种方法可以解决此问题: 不要丢弃连接,并对所有呼叫重复
这样做的正确方法是什么?您不应该在每次通话中都创建连接,这将非常低效。
如果可能,还应避免静态连接。它会使单元测试更难编写,并防止在同一进程中有多个连接 好的,您的建议是什么?在您发布链接的示例代码中,我将从私有连接变量中删除static关键字,并使连接成为封闭对象的非静态成员,我将使用实例构造函数构造该对象。我将向封闭类添加Dispose方法,并在连接实例上调用Dispose方法“请注意,ConnectionMultiplexer实现IDisposable,不再需要时可以释放。这是故意不显示using语句的用法,因为很少有人希望简单地使用ConnectionMultiplexer,因为这样做的目的是重用此对象。”