Scope::awaitCompletion

(PHP 8.6+, True Async 1.0)

public function awaitCompletion(Awaitable $cancellation): void

Wartet auf den Abschluss aller aktiven Koroutinen im Scope. Zombie-Koroutinen werden beim Warten nicht beruecksichtigt. Der Parameter $cancellation ermoeglicht ein vorzeitiges Unterbrechen des Wartens.

Parameter

cancellation — ein Awaitable-Objekt, das beim Ausloesen das Warten unterbricht.

Rueckgabewert

Es wird kein Wert zurueckgegeben.

Beispiele

Beispiel #1 Auf alle Koroutinen warten

<?php

use Async\Scope;
use function Async\timeout;

$scope = new Scope();

$scope->spawn(function() {
    \Async\delay(1000);
    echo "Aufgabe 1 abgeschlossen\n";
});

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

// Mit einem 5-Sekunden-Timeout auf Abschluss warten
$scope->awaitCompletion(timeout(5000));
echo "Alle Aufgaben erledigt\n";

Beispiel #2 Warten unterbrechen

<?php

use Async\Scope;
use function Async\timeout;

$scope = new Scope();

$scope->spawn(function() {
    \Async\delay(60_000); // Sehr lange Aufgabe
});

try {
    $scope->awaitCompletion(timeout(3000));
} catch (\Async\CancelledException $e) {
    echo "Warten durch Timeout unterbrochen\n";
    $scope->cancel();
}

Siehe auch