如何在订阅时保持StackExchange.Redis处于打开状态

时间:2017-09-29 03:45:31

标签: c# redis stackexchange.redis

即使订阅频道,我的节目也会关闭。有没有正确的方法来保持开放? (不是Console.ReadLine();

using System;
using StackExchange.Redis;

namespace redis.test
{
    class Program
    {
        static void Main(string[] args)
        {
            ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");
            IDatabase db = redis.GetDatabase();

            ISubscriber sub = redis.GetSubscriber();

            sub.Subscribe("test", (channel, message) => {
                Console.WriteLine("Got notification: " + (string)message);
            });
        }
    }
}

2 个答案:

答案 0 :(得分:0)

回答reddit:

看到此代码,您所描述的内容的当前行为是预期的,因为该程序已在console.writeline()之后完成。

我不确定你想要做什么,不要在写字线后杀死应用程序。如果你能说出你想要在写字线后暂停申请的原因那么我可以帮助你更多。

如果您只是想在之后看到输出,可以通过

将输出传输到文本文件
  

cmd / c“C:\ path \ to \ your \ application.exe”> myfile.txt的

但是,console.readline()是一种更简单的方法

答案 1 :(得分:0)

使用ManualResetEvent

using (var exitEvent = new ManualResetEvent(false))
{
    Console.CancelKeyPress += (sender, eventArgs) =>
    {
        eventArgs.Cancel = true;
        exitEvent.Set();
    };

    ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("localhost");
    IDatabase db = redis.GetDatabase();
    ISubscriber sub = redis.GetSubscriber();
    sub.Subscribe("test", (channel, message) => {
        Console.WriteLine("Got notification: " + (string)message);
    });

    Console.WriteLine("waiting...");
    exitEvent.WaitOne();
}