当我在AppFabric中拥有缓存锁时,如何增加超时

时间:2012-09-29 14:41:58

标签: c# appfabric appfabric-cache

现在我正在尝试锁定AppFabric Cache中的项目,我想保持锁定直到我的工作完成,所以我需要告诉AppFabric在我已经拥有锁定时不要让我的锁定超时。    我的解决方案是即使我已经拥有锁,也要定期锁定同一个项目。

while (true)
{
    try
    {
        String value = cacheClient.GetAndLock("key1", TimeSpan.FromSeconds(10), out lockHandle, true) as String;
        Console.WriteLine(value);
    }
    catch (DataCacheException e)
    {
        switch (e.ErrorCode)
        {
            case DataCacheErrorCode.KeyDoesNotExist:
                Console.WriteLine("Key not found");
                break;
            case DataCacheErrorCode.ObjectLocked:
                Console.WriteLine("Object Locked");
                break;
            default:
                Console.WriteLine("Others " + e.ErrorCode);
                break;
        }
    }
    Thread.Sleep(1000);
}

但是有一个问题。代码抛出DataCacheException,ErrorCode是ObjectLocked。这让我无法知道我是否仍然拥有锁,因为如果该锁由另一个客户端拥有,则该异常与当前的一个相同。    有没有人有解决方案来解决问题?

提前谢谢。

1 个答案:

答案 0 :(得分:1)

在悲观并发模型中,客户端显式锁定对象以执行操作。当对象被锁定时,锁定句柄将作为输出参数返回,并且需要解锁对象。每个锁定对象只有一个唯一的句柄。

缓存中的锁定对象仍可由具有 Put 方法的任何缓存客户端替换,您可以使用获取获取项目。启用缓存的应用程序负责一致地使用 PutAndUnlock 来处理使用悲观并发模型的项目。

因此,在您的情况下,如果您想要增加锁定对象的锁定超时,您可以简单地再次使用相同的超时(由同一客户端,“锁定器”)放置相同的对象