Start · Sprachen · PHP · Referenz · eio_grp_cancel

eio_grp_cancel

Funktion

Bricht alle noch ausstehenden Anfragen innerhalb einer <code>eio</code>-Request-Gruppe ab.

Kategorie: io

Signatur

eio_grp_cancel(resource $grp): void

Beschreibung

eio_grp_cancel() bricht sämtliche noch nicht abgeschlossenen Einzel-Requests ab, die zu der mit eio_grp() erstellten Request-Gruppe $grp gehören. Die Gruppe selbst wird dabei ebenfalls abgebrochen, sodass auch ihr Callback nicht mehr aufgerufen wird.

Diese Funktion ist Teil der eio-Erweiterung, die asynchrone POSIX-I/O-Operationen in PHP ermöglicht. Request-Gruppen fassen mehrere asynchrone Anfragen logisch zusammen und erlauben es, sie gemeinsam zu steuern oder zu überwachen.

Ein typischer Anwendungsfall ist die vorzeitige Unterbrechung einer Datei-Batch-Verarbeitung, etwa wenn ein übergeordneter Prozess abbricht, ein Timeout auftritt oder der Benutzer eine laufende Operation storniert. Durch den Aufruf von eio_grp_cancel() müssen nicht alle Einzel-Requests einzeln abgebrochen werden.

Beachte, dass bereits begonnene und abgeschlossene Requests innerhalb der Gruppe nicht rückgängig gemacht werden können; eio_grp_cancel() verhindert nur die Ausführung noch ausstehender Requests.

Parameter

Name Typ Default Beschreibung
$grp Pflicht resource Eine gültige Resource, die eine mit eio_grp() erstellte Request-Gruppe repräsentiert.

Rückgabewert

Typ
void
Beschreibung
Es wird kein Wert zurückgegeben.

Beispiele

Request-Gruppe erstellen und vorzeitig abbrechen

<?php
// Voraussetzung: eio-Erweiterung ist installiert und aktiv

// Callback für die Gruppe (wird bei Abbruch NICHT aufgerufen)
$grp_callback = function ($data, $result) {
    echo "Gruppe abgeschlossen\n";
};

// Request-Gruppe erstellen
$grp = eio_grp($grp_callback, 'Gruppendaten');

// Mehrere asynchrone Lese-Anfragen zur Gruppe hinzufügen
eio_grp_add($grp, eio_read(
    fopen('/tmp/testfile.txt', 'r'),
    1024,
    0,
    EIO_PRI_DEFAULT,
    function ($data, $result) {
        echo "Gelesen: " . strlen($result) . " Bytes\n";
    }
));

// Gruppe sofort abbrechen, bevor eio_event_loop() sie ausführt
eio_grp_cancel($grp);

// Eventloop starten – Gruppen-Callback und ausstehende Requests werden nicht ausgeführt
eio_event_loop();

echo "Fertig – Gruppe wurde abgebrochen.\n";
Fertig – Gruppe wurde abgebrochen.

Timeout-basierter Abbruch einer Request-Gruppe

<?php
$grp = eio_grp(function ($data, $result) {
    echo "Gruppe fertig\n";
}, null);

eio_grp_add($grp, eio_stat('/tmp/grossedatei.bin', EIO_PRI_DEFAULT, function ($data, $result) {
    echo "stat abgeschlossen\n";
}));

// Simulierter Timeout: Gruppe nach kurzer Zeit abbrechen
$start = microtime(true);
while (eio_npending() > 0) {
    eio_poll();
    if ((microtime(true) - $start) > 0.5) {
        // Mehr als 500 ms vergangen – abbrechen
        eio_grp_cancel($grp);
        echo "Timeout: Gruppe abgebrochen\n";
        break;
    }
}
Timeout: Gruppe abgebrochen

// Wichtig · Fallstricke

Achtung: eio_grp_cancel() bricht ausschließlich noch ausstehende Requests ab. Bereits ausgeführte Requests innerhalb der Gruppe können nicht rückgängig gemacht werden – etwaige Seiteneffekte (z. B. geschriebene Dateien) bleiben bestehen.

Die Funktion steht nur zur Verfügung, wenn die eio-PECL-Erweiterung installiert ist. Sie ist nicht Teil des PHP-Kerns und muss separat kompiliert bzw. als Shared Extension geladen werden.

Nach dem Abbruch sollte die Gruppen-Resource nicht mehr für weitere eio_grp_add()-Aufrufe verwendet werden, da das Verhalten undefiniert sein kann.