Kyl*_*bel 6 c# multithreading publish-subscribe redis servicestack
这可能是一个更通用的线程问题,我不确定.
但我有一个WPF应用程序订阅频道并侦听来自redis数据库的消息.
App.SubscriptionThread = new Thread(() =>
{
_redisSubscription.SubscribeToChannels("ChannelA", "ChannelB");
});
App.SubscriptionThread.Start();
Run Code Online (Sandbox Code Playgroud)
一旦我开始这个,我不知道如何阻止它.
我尝试过的事情.
使用Thread.Abort.这显然不会阻止它,因为线程只是永远挂起(没有取消订阅).
使用_redisSubscription.UnSubscribeFromAllChannels()来自UI线程.这也导致应用程序永远进入阻塞状态
强制关机使用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
}
Run Code Online (Sandbox Code Playgroud)
它使用自定义控制消息来解锁后台线程并从订阅OnMessage处理程序中取消订阅所有频道。
| 归档时间: |
|
| 查看次数: |
3386 次 |
| 最近记录: |