redis - 如何使用 StackExchange.Redis 断开与 redis 的连接?
问题描述
我正在运行一个长时间运行的可执行文件(大约 30 分钟的会话),但我只需要在开始时和会话结束时写入 redis 一次。
因此,我想在第一次写入后断开我的 redis 连接,然后在最后重新连接,这样当我不需要它时,我就不会一直使用持久连接。
我试图通过将我的逻辑包装在using块中来断开连接。但是,我得到了这个错误(不是 100% 可重现,但可能大约有 50% 的时间):
System.InvalidOperationException:读取器完成后不允许读取。在 System.IO.Pipelines.Pipe.AdvanceReader(SequencePosition& 消耗,SequencePosition& 检查)
其次是
System.Net.Sockets.SocketException (0x80004005):由于 Pipelines.Sockets.Unofficial.SocketAwaitableEventArgs.g__ThrowSocketException|10_0(SocketError e) 的线程退出或应用程序请求,I/O 操作已中止
at System.Environment.GetStackTrace(Exception e, Boolean needFileInfo)
at System.Environment.get_StackTrace()
at aag.Natives.Api.DeveloperApi.HtmlLogger.ProcessHtmlMessage(DevLogType logType, String message)
at aag.Natives.Api.DeveloperApi.LogError(String message)
at aag.GameServer.EntryPoint.<>c__DisplayClass47_0.<.ctor>b__1(Object s, FirstChanceExceptionEventArgs e) in E:\dev\LegionTD2_LFS\GameEngine\GameServer\src\GameServer\EntryPoint.cs:line 131
at System.Net.Sockets.Socket.EndReceive(IAsyncResult asyncResult)
at DarkRift.ConnectionService.ChunkReadCallback(IAsyncResult result)
at System.Net.LazyAsyncResult.Complete(IntPtr userToken)
at System.Net.ContextAwareResult.CompleteCallback(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Net.ContextAwareResult.Complete(IntPtr userToken)
at System.Net.LazyAsyncResult.ProtectedInvokeCallback(Object result, IntPtr userToken)
at System.Net.Sockets.BaseOverlappedAsyncResult.CompletionPortCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* nativeOverlapped)
at System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP)
我会以错误的方式解决这个问题吗?或者这个错误是良性的并且应该被忽略?
解决方案
推荐阅读
- jquery - jQuery:如何来回切换按钮的文本?
- php - Laravel 所属不返回
- image - 从 C++ 中的 SVS 格式文件中提取全比例图像
- php - Yii2 标记 2amigos 不会将标记保存到表中
- html - 如何将访问者在我们网页上填写的表单数据保存在我们的计算机中
- javascript - 使用 setTimeout 时不会触发 load() 内的 prependTo() 完成回调
- jenkins - 在构建詹金斯之前更改 SQL 凭据
- mysql - MySQL If else 构造语法
- rasa-nlu - 如何在 Rasa Core 中创建多行机器人响应?
- angular - Angular 7 Reactive Forms无法读取未定义的属性“控件”