KomponentenScope::disposeSafely

Scope::disposeSafely ​

(PHP 8.6+, True Async 1.0)

php
public function disposeSafely(): void

Schliesst den Scope sicher. Aktive Koroutinen werden nicht abgebrochen, sondern werden zu Zombie-Koroutinen: Sie laufen weiter, aber der Scope gilt als geschlossen. Zombie-Koroutinen werden von selbst beendet, wenn sie ihre Arbeit abgeschlossen haben.

Wenn der Scope ueber asNotSafely() als "nicht sicher" markiert ist, werden Koroutinen abgebrochen, anstatt zu Zombies zu werden.

Rueckgabewert ​

Es wird kein Wert zurueckgegeben.

Beispiele ​

Beispiel #1 Grundlegende Verwendung ​

php
<?php

use Async\Scope;

$scope = new Scope();

$scope->spawn(function() {
    \Async\delay(5000);
    echo "Aufgabe als Zombie abgeschlossen\n";
});

// Scope ist geschlossen, aber die Koroutine laeuft weiter
$scope->disposeSafely();

var_dump($scope->isClosed()); // bool(true)
// Koroutine wird im Hintergrund weiter ausgefuehrt

Beispiel #2 Geordnetes Herunterfahren mit Zombie-Warten ​

php
<?php

use Async\Scope;

$scope = new Scope();

$scope->spawn(function() {
    \Async\delay(2000);
    echo "Hintergrundaufgabe abgeschlossen\n";
});

$scope->disposeSafely();

// Auf Zombie-Koroutinen warten
$scope->awaitAfterCancellation(
    errorHandler: function(\Throwable $e) {
        error_log("Zombie-Fehler: " . $e->getMessage());
    }
);

Siehe auch ​