我试图了解在订阅(和取消订阅)通知领域专门使用 SE.Redis 对象的范围。
我想做类似以下的事情来等待远程节点指示它已更改/释放资源(一个非常愚蠢的分布式信号量):
var t = new TaskCompletionSource<bool>();
sub.Subscribe(key, (c, v) =>
{
t.TrySetResult(true);
sub.UnsubscribeAll();
});
return t.Task;
我相当肯定这是错误的 :) 并且在ConnectionMultiplexer
共享的多线程环境中,我可能最终会陷入一场比赛,一个线程订阅特定的线程,RedisChannel
而另一个线程取消订阅它。
是否有可能安全/有效地实现这种模式,或者我是否试图过多地简化这个问题并且需要一个每个进程的“订阅管理器”来协调我的订阅?