Метод refresh класса Lock
Метод refresh класса Lock продлевает срок жизни уже acquired блокировки. Он используется в тех случаях, когда операция выполняется дольше, чем изначальный TTL блокировки, и нужно предотвратить её автоматическое истечение. Метод не принимает параметров и возвращает boolean: true, если блокировка успешно обновлена, и false в противном случае.
Синтаксис
public function refresh(): bool
Пример
Давайте создадим блокировку, а затем продлим её срок жизни:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentLockLockFactory;
class LockController extends AbstractController
{
public function index(LockFactory $lockFactory): Response
{
$lock = $lockFactory->createLock('article');
$res = $lock->acquire();
var_dump($res);
$res = $lock->refresh();
var_dump($res);
return new Response('ok');
}
}
?>
Результат выполнения кода:
bool(true)
bool(true)
Пример
Давайте проверим, что refresh возвращает false, если блокировка не была acquired:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentLockLockFactory;
class LockController extends AbstractController
{
public function index(LockFactory $lockFactory): Response
{
$lock = $lockFactory->createLock('article');
$res = $lock->refresh();
var_dump($res);
return new Response('ok');
}
}
?>
Результат выполнения кода:
bool(false)
Пример
Давайте продлим блокировку после освобождения и убедимся, что метод возвращает false:
<?php
namespace AppController;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
use SymfonyComponentLockLockFactory;
class LockController extends AbstractController
{
public function index(LockFactory $lockFactory): Response
{
$lock = $lockFactory->createLock('article');
$lock->acquire();
$lock->release();
$res = $lock->refresh();
var_dump($res);
return new Response('ok');
}
}
?>
Результат выполнения кода:
bool(false)
Смотрите также
-
класс
Lock,
который представляет блокировку ресурса -
метод
acquire,
который захватывает блокировку -
метод
release,
который освобождает блокировку -
метод
isAcquired,
который проверяет, захвачена ли блокировка