jhi*_*den 3 redis stackexchange.redis
我有以下方法等待 Redis 键上的独占锁。这种方法有效,但我想知道是否有更好的方法,无需 for 循环和 Thread.Sleep。
/// <summary>
/// wait up to 2 seconds to achieve a lock!
/// The lock is good for a maximum of 3 seconds
/// </summary>
/// <param name="codeID"></param>
internal void WaitForSingleUseLock(CodeID codeID)
{
var key = _redemptionRepo.SingleUseCodeLockPrefix + codeID.Value;
var expiration = TimeSpan.FromSeconds(3);
for (var i = 0; i < 20; i++)
{
var lockAchieved = _cacheRepo.LockTake(key, "1", expiration);
if (lockAchieved)
{
break;
}
Thread.Sleep(TimeSpan.FromMilliseconds(100));
}
}
Run Code Online (Sandbox Code Playgroud)
我唯一可以建议不同的是,将 pub/sub 视为侧通道(意思是:另外,而不是替换),用于指示锁现在何时可用- 即在释放时发布,并使用 sub 来释放计时器(通过监视器或异步等待句柄)。
除此之外:不。Redis 没有待处理队列的概念。您也许可以使用列表构建一个,但是......
| 归档时间: |
|
| 查看次数: |
4912 次 |
| 最近记录: |