Scope::disposeSafely

(PHP 8.6+, True Async 1.0)

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

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

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