Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#Azure Redis缓存-无法访问已处理的对象异常_C#_Azure_Caching_Redis_Stackexchange.redis - Fatal编程技术网

C#Azure Redis缓存-无法访问已处理的对象异常

C#Azure Redis缓存-无法访问已处理的对象异常,c#,azure,caching,redis,stackexchange.redis,C#,Azure,Caching,Redis,Stackexchange.redis,按照下面的链接在Web API中实现Redis缓存。 缓存第一次工作正常,但由于错误而失败 “无法访问已释放的对象” …在随后的阅读中 正如在上面的博客中提到的,我正在处理方法末尾的连接,并再次调用该方法,抛出上述异常: lazyConnection.Value.Dispose() 还尝试将连接属性封装在不同的类中,如本文所述。但是,由于它们被声明为静态的,所以在所有实例中保留相同的值,因此在处理连接时,在后续调用中会导致相同的异常 有几种方法可以解决此问题: 不要丢弃连接,并对所有呼叫重复

按照下面的链接在Web API中实现Redis缓存。

缓存第一次工作正常,但由于错误而失败

“无法访问已释放的对象”

…在随后的阅读中

正如在上面的博客中提到的,我正在处理方法末尾的连接,并再次调用该方法,抛出上述异常: lazyConnection.Value.Dispose()

还尝试将连接属性封装在不同的类中,如本文所述。但是,由于它们被声明为静态的,所以在所有实例中保留相同的值,因此在处理连接时,在后续调用中会导致相同的异常

有几种方法可以解决此问题:

  • 不要丢弃连接,并对所有呼叫重复使用同一连接

  • 使缓存连接非静态,以便为每个调用创建和释放一个新连接


  • 这样做的正确方法是什么?

    您不应该在每次通话中都创建连接,这将非常低效。
    如果可能,还应避免静态连接。它会使单元测试更难编写,并防止在同一进程中有多个连接

    好的,您的建议是什么?在您发布链接的示例代码中,我将从私有连接变量中删除static关键字,并使连接成为封闭对象的非静态成员,我将使用实例构造函数构造该对象。我将向封闭类添加Dispose方法,并在连接实例上调用Dispose方法“请注意,ConnectionMultiplexer实现IDisposable,不再需要时可以释放。这是故意不显示using语句的用法,因为很少有人希望简单地使用ConnectionMultiplexer,因为这样做的目的是重用此对象。”