Scope::disposeSafely

(PHP 8.6+, True Async 1.0)

public function disposeSafely(): void

Cierra el ámbito de forma segura. Las corrutinas activas no se cancelan, sino que se convierten en corrutinas zombis: continúan ejecutándose, pero el ámbito se considera cerrado. Las corrutinas zombis terminarán por sí solas cuando completen su trabajo.

Si el ámbito está marcado como “no seguro” mediante asNotSafely(), las corrutinas serán canceladas en lugar de convertirse en zombis.

Valor de retorno

No se devuelve ningún valor.

Ejemplos

Ejemplo #1 Uso básico

<?php

use Async\Scope;

$scope = new Scope();

$scope->spawn(function() {
    \Async\delay(5000);
    echo "Task completed as a zombie\n";
});

// Scope is closed, but the coroutine continues running
$scope->disposeSafely();

var_dump($scope->isClosed()); // bool(true)
// Coroutine continues executing in the background

Ejemplo #2 Terminación ordenada con espera de zombis

<?php

use Async\Scope;

$scope = new Scope();

$scope->spawn(function() {
    \Async\delay(2000);
    echo "Background task completed\n";
});

$scope->disposeSafely();

// Wait for zombie coroutines to finish
$scope->awaitAfterCancellation(
    errorHandler: function(\Throwable $e) {
        error_log("Zombie error: " . $e->getMessage());
    }
);

Ver también