gpt4 book ai didi

c# - Redis Pub/Sub ServiceStack,取消线程

转载 作者:IT王子 更新时间:2023-10-29 05:57:26 25 4
gpt4 key购买 nike

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

但是我有一个 WPF 应用程序可以订阅 channel 并监听来自 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 处理程序取消订阅所有 channel 。

关于c# - Redis Pub/Sub ServiceStack,取消线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21204839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com