2016-04-30 6 views
1

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

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

теперь я хочу использовать Publish/Subscribe функции так, что мой 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 
+0

Эта библиотека, похоже, имеет странный «наблюдаемый» синтаксис, поэтому вам нужно снова подписаться на «obb», чтобы увидеть результаты. Попробуйте 'obb.Subscribe (x => Debug.WriteLine (x.ToString())) и дайте мне знать, какие результаты вы получите. – Enigmativity

+0

Можете ли вы показать в своем коде точно, как вы пробовали предложенные изменения? – Enigmativity

+0

@ Добавлен код энигматизма – ankur

ответ

0

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

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

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