Redis Pub / Sub ServiceStack,取消线程
这可能是一个更通用的线程问题,我不确定。
但我有一个WPF应用程序订阅频道并侦听来自redis数据库的消息。
App.SubscriptionThread = new Thread(() => { _redisSubscription.SubscribeToChannels("ChannelA", "ChannelB"); }); App.SubscriptionThread.Start();
一旦我开始这个,我不知道如何阻止它。
我尝试过的事情。
-
使用
Thread.Abort
。 这显然不会阻止它,因为线程只是永远挂起(没有取消订阅)。 -
使用UI线程中的
_redisSubscription.UnSubscribeFromAllChannels()
。 这也导致应用程序永远进入阻塞状态 -
使用
Environment.Exit(0)
强制关闭。 这个似乎可以解决问题。 不幸的是它也有……好……关闭我的应用程序的副作用。
如何停止聆听,我可以随意连接/重新连接?
我是通过在新线程中启动SubscribeToChannels来做错的吗?
显示如何订阅和取消订阅消息的示例位于RedisMqServer中 ,例如:
using (var subscription = redisClient.CreateSubscription()) { subscription.OnUnSubscribe = channel => Log.Debug("OnUnSubscribe: " + channel); subscription.OnMessage = (channel, msg) => { if (msg == "STOP") { Log.Debug("Stop Command Issued"); Log.Debug("Unsubscribing from all Channels..."); subscription.UnSubscribeFromAllChannels(); //Unblocks thread. } }; subscription.SubscribeToChannels(QueueNames.TopicIn); //blocks thread }
它使用自定义控件消息来取消阻止后台线程并取消订阅订阅OnMessage处理程序中的所有通道。
上述就是C#学习教程:Redis Pub / Sub ServiceStack,取消线程分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1003131.html