Scope::disposeSafely

(PHP 8.6+, True Async 1.0)

public function disposeSafely(): void

Chiude 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

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 background

Esempio #2 Arresto graduale con attesa degli zombie

<?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