Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

连接Redis成功后,上锁,然后模拟断开会令到控制台程序异常退出 #171

Open
YBenLee opened this issue Jan 4, 2024 · 5 comments

Comments

@YBenLee
Copy link

YBenLee commented Jan 4, 2024

`RedisClient redisClient = new RedisClient("xxxxx");

        while (true)
        {
            try
            {
                var l = redisClient.Lock("console_test", 1);
                if (null != l)
                {
                    Console.WriteLine("获取锁成功.");
                }
                else
                {
                    Console.WriteLine("获取锁失败");
                }

            }
            catch (Exception ex)
            {
                Console.WriteLine($"异常:{ex.Message}");
            }

            Thread.Sleep(1000);
        }`

先连接成功,再使用工具模拟断网
image

之后就会不断的抛出异常,然后控制台程序会退出

@2881099
Copy link
Owner

2881099 commented Jan 4, 2024

获取锁之后,使用了没释放

@YBenLee
Copy link
Author

YBenLee commented Jan 4, 2024 via email

@YBenLee
Copy link
Author

YBenLee commented Jan 4, 2024

获取锁之后,使用了没释放

我只是示例,即使释放也是会导致程序崩溃退出的。我使用全局捕抓异常也不行。

        // 注册未处理异常事件处理程序
        AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(UnhandledExceptionHandler);

        TaskScheduler.UnobservedTaskException += new EventHandler<UnobservedTaskExceptionEventArgs>(UnobservedTaskExceptionHandler);

@2881099
Copy link
Owner

2881099 commented Jan 4, 2024

这个错误是执行命令后,服务器没响应

@YBenLee
Copy link
Author

YBenLee commented Jan 4, 2024

这个错误是执行命令后,服务器没响应

我希望的是,即使服务器无响应都不应该导致我程序异常退出。

因为有可能会是网络波动,但原本我是正常连接的。但网络波动之后,捕获不了所有异常处理。导致程序被动退出了。其实应该在网络波动的时候,降频重连等待网络恢复,这是我期望的。
image

一直是在RespHelper这个类里面报错。
image

[异常] System.Net.Sockets.dll!System.Net.Sockets.NetworkStream.Read(System.Span<byte> buffer)	未知
[异常] System.Net.Sockets.dll!System.Net.Sockets.NetworkStream.ReadByte()	未知

[异常] FreeRedis.dll!FreeRedis.RespHelper.Resp3Reader.ReadObject(System.Text.Encoding encoding) 行 207 C#
[异常] FreeRedis.dll!FreeRedis.Internal.DefaultRedisSocket.Read(FreeRedis.CommandPacket cmd) 行 180 C#
[异常] FreeRedis.dll!FreeRedis.Internal.DefaultRedisSocket.TempProxyRedisSocket.Read(FreeRedis.CommandPacket cmd) 行 70 C#
[异常] FreeRedis.dll!FreeRedis.RedisClient.PoolingAdapter.AdapterCall.AnonymousMethod__0() 行 80 C#
[异常] FreeRedis.dll!FreeRedis.RedisClient.LogCallCtrl(FreeRedis.CommandPacket cmd, System.Func func, bool aopBefore, bool aopAfter) 行 98 C#
[异常] FreeRedis.dll!FreeRedis.RedisClient.LogCall(FreeRedis.CommandPacket cmd, System.Func func) 行 93 C#
[异常] FreeRedis.dll!FreeRedis.RedisClient.PoolingAdapter.AdapterCall(FreeRedis.CommandPacket cmd, System.Func<FreeRedis.RedisResult, TValue> parse) 行 70 C#
[异常] FreeRedis.dll!FreeRedis.RedisClient.Call(FreeRedis.CommandPacket cmd, System.Func<FreeRedis.RedisResult, TValue> parse) 行 91 C#
[异常] FreeRedis.dll!FreeRedis.RedisClient.Eval(string script, string[] keys, object[] arguments) 行 32 C#
[异常] FreeRedis.dll!FreeRedis.RedisClient.LockController.Refresh(int milliseconds) 行 82 C#
[异常] FreeRedis.dll!FreeRedis.RedisClient.LockController..ctor.AnonymousMethod__0(object state2) 行 53 C#
[异常] System.Private.CoreLib.dll!System.Threading.TimerQueueTimer..cctor.AnonymousMethod__27_0(object state) 未知
[异常] System.Private.CoreLib.dll!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state) 未知
System.Private.CoreLib.dll!System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 未知
System.Private.CoreLib.dll!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state) 未知
System.Private.CoreLib.dll!System.Threading.TimerQueueTimer.CallCallback(bool isThreadPool) 未知
System.Private.CoreLib.dll!System.Threading.TimerQueueTimer.Fire(bool isThreadPool) 未知
System.Private.CoreLib.dll!System.Threading.TimerQueue.FireNextTimers() 未知
System.Private.CoreLib.dll!System.Threading.TimerQueue.AppDomainTimerCallback(int id) 未知
[本机到托管的转换]
[托管到本机的转换]
System.Private.CoreLib.dll!System.Threading.UnmanagedThreadPoolWorkItem.System.Threading.IThreadPoolWorkItem.Execute() 未知
System.Private.CoreLib.dll!System.Threading.ThreadPoolWorkQueue.Dispatch() 未知
System.Private.CoreLib.dll!System.Threading.PortableThreadPool.WorkerThread.WorkerThreadStart() 未知
System.Private.CoreLib.dll!System.Threading.Thread.StartCallback() 未知

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants