将 publish/subscribe 与 sider redis C# 客户端一起使用
use publish/subscribe with sider redis C# client
我正在使用 Sider C# Redis 客户端连接到我 windows 7 机器上的 Redis 服务器 运行。
https://github.com/chakrit/sider
我可以从我的 C# 应用程序中触发 set/get/select
我现在想使用 Publish/Subscribe 功能,以便我的 C# 应用程序可以在 事件方式(通过代表)
我无法为此编写代码,因为没有关于如何使用 sider 客户端页面的示例。
我能写的就是这个:
var client = new RedisClient(address, 6379);
string[] keys = new string[1];
keys[0] = "key1ToMonitor";
IObservable<Message<string>> obb = client.Subscribe(keys);
我知道这看起来很蹩脚,但我不知道如何以 lambda 方式编写它,如果任何客户端更改 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
您需要订阅实际生成的可观察对象。像这样:
obb.Subscribe(x => Debug.WriteLine(x.ToString()));
不要忘记添加 using System.Reactive.Linq;
以获得将 lambda 转换为观察者所需的扩展。
我正在使用 Sider C# Redis 客户端连接到我 windows 7 机器上的 Redis 服务器 运行。 https://github.com/chakrit/sider
我可以从我的 C# 应用程序中触发 set/get/select
我现在想使用 Publish/Subscribe 功能,以便我的 C# 应用程序可以在 事件方式(通过代表)
我无法为此编写代码,因为没有关于如何使用 sider 客户端页面的示例。
我能写的就是这个:
var client = new RedisClient(address, 6379);
string[] keys = new string[1];
keys[0] = "key1ToMonitor";
IObservable<Message<string>> obb = client.Subscribe(keys);
我知道这看起来很蹩脚,但我不知道如何以 lambda 方式编写它,如果任何客户端更改 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
您需要订阅实际生成的可观察对象。像这样:
obb.Subscribe(x => Debug.WriteLine(x.ToString()));
不要忘记添加 using System.Reactive.Linq;
以获得将 lambda 转换为观察者所需的扩展。