我有以下方法,它將等待Redis密鑰上的獨佔鎖。這種方法的工作原理,但我想知道沒有for循環和Thread.Sleep是否有更好的方法。釋放時,即發佈 - 用於指示何時鎖威力現在可用:StackExchange.Redis - 等待鎖的最佳方式
/// <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));
}
}