Csharp/C#教程:Redis Pub / Sub ServiceStack,取消线程分享


Redis Pub / Sub ServiceStack,取消线程

这可能是一个更通用的线程问题,我不确定。

但我有一个WPF应用程序订阅频道并侦听来自redis数据库的消息。

App.SubscriptionThread = new Thread(() => { _redisSubscription.SubscribeToChannels("ChannelA", "ChannelB"); }); App.SubscriptionThread.Start(); 

一旦我开始这个,我不知道如何阻止它。

我尝试过的事情。

  1. 使用Thread.Abort 。 这显然不会阻止它,因为线程只是永远挂起(没有取消订阅)。

  2. 使用UI线程中的_redisSubscription.UnSubscribeFromAllChannels() 。 这也导致应用程序永远进入阻塞状态

  3. 使用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

(0)
上一篇 2021年12月27日
下一篇 2021年12月27日

精彩推荐