Scope::disposeSafely
(PHP 8.6+, True Async 1.0)
php
public function disposeSafely(): voidChiude lo scope in modo sicuro. Le coroutine attive non vengono cancellate ma diventano coroutine zombie: continuano a funzionare, ma lo scope e' considerato chiuso. Le coroutine zombie termineranno autonomamente quando completeranno il loro lavoro.
Se lo scope e' contrassegnato come "non sicuro" tramite asNotSafely(), le coroutine verranno cancellate invece di diventare zombie.
Valore di ritorno
Non viene restituito alcun valore.
Esempi
Esempio #1 Utilizzo base
php
<?php
use Async\Scope;
$scope = new Scope();
$scope->spawn(function() {
\Async\delay(5000);
echo "Task completato come zombie\n";
});
// Lo scope e' chiuso, ma la coroutine continua a funzionare
$scope->disposeSafely();
var_dump($scope->isClosed()); // bool(true)
// La coroutine continua l'esecuzione in backgroundEsempio #2 Arresto graduale con attesa degli zombie
php
<?php
use Async\Scope;
$scope = new Scope();
$scope->spawn(function() {
\Async\delay(2000);
echo "Task in background completato\n";
});
$scope->disposeSafely();
// Attende il completamento delle coroutine zombie
$scope->awaitAfterCancellation(
errorHandler: function(\Throwable $e) {
error_log("Errore zombie: " . $e->getMessage());
}
);Vedi anche
- Scope::dispose — Chiusura forzata dello scope
- Scope::asNotSafely — Disabilita il comportamento zombie
- Scope::awaitAfterCancellation — Attende le coroutine zombie