Использовать публикацию / подписку с клиентом sider redis C#

Я использую клиент Sider C# Redis для подключения к серверу Redis, работающему на моем компьютере с Windows 7. https://github.com/chakrit/sider

Я могу запустить установить / получить / выбрать из моего приложения C#

Теперь я хочу использовать функцию публикации / подписки, чтобы мое приложение на C# могло быть извещено о любых изменениях в "ключе" клиента redis (прохождение делегатов).

Я не могу написать код для этого, так как нет примеров того, как использовать страницу клиента sider.

все, что я мог написать, было это:

var client = new RedisClient(address, 6379);
string[] keys = new string[1];
keys[0] = "key1ToMonitor";
IObservable<Message<string>> obb = client.Subscribe(keys);

Я знаю, что это выглядит неубедительно, но я понятия не имел, как написать это лямбда-образом, где моя функция будет вызываться, если какой-либо клиент изменит нужные ключи на сервере redis.

PS: я новичок в этом, так что поправьте меня, если мой подход неверен.

Изменить: при добавлении предлагаемых изменений я получаю следующую ошибку.

Error   7   Cannot convert lambda expression to type 'System.IObserver<Sider.Message<string>>' because it is not a delegate type    D:\_Work\TestApp\Program.cs 90  27  TestApp

подпись obb.subscribe выглядит следующим образом

namespace System
{
    // Summary:
    //     Defines a provider for push-based notification.
    //
    // Type parameters:
    //   T:
    //     The object that provides notification information.This type parameter is
    //     covariant. That is, you can use either the type you specified or any type
    //     that is more derived. For more information about covariance and contravariance,
    //     see Covariance and Contravariance in Generics.
    public interface IObservable<out T>
    {
        // Summary:
        //     Notifies the provider that an observer is to receive notifications.
        //
        // Parameters:
        //   observer:
        //     The object that is to receive notifications.
        //
        // Returns:
        //     The observer's interface that enables resources to be disposed.
        IDisposable Subscribe(IObserver<T> observer);
    }
}

код:

        var client = new RedisClient(address, 6379);
        string[] keys = new string[1];
        keys[0] = "key1ToMonitor";
        IObservable<Message<string>> obb = client.Subscribe(keys);
        obb.Subscribe(x => Debug.WriteLine(x.ToString()) ); // error : doesn't let me compile  

1 ответ

Решение

Вы должны подписаться на фактическую наблюдаемую добычу. Что-то вроде этого:

obb.Subscribe(x => Debug.WriteLine(x.ToString()));

Не забудьте добавить using System.Reactive.Linq; чтобы получить расширения, необходимые для преобразования лямбды в наблюдателя.

Другие вопросы по тегам