Использовать публикацию / подписку с клиентом 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;
чтобы получить расширения, необходимые для преобразования лямбды в наблюдателя.