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