Signatur
Beschreibung
parallel\Events\Event\Type ist eine Klassen-Konstanten-Sammlung (ähnlich einer Enumeration), die alle möglichen Ereignistypen auflistet, die vom Event-Loop parallel\Events zurückgegeben werden können. Jedes parallel\Events\Event-Objekt besitzt eine type-Eigenschaft, deren Wert einer dieser Konstanten entspricht.
Die Typen unterscheiden sich danach, ob ein Kanal gelesen oder geschrieben wurde, ob ein Future seinen Wert geliefert hat, ob ein Kanal oder Future gecancelt oder geschlossen wurde. Durch den Vergleich mit diesen Konstanten kann der Entwickler im Event-Loop präzise auf die jeweilige Situation reagieren.
Typisch wird parallel\Events\Event\Type zusammen mit parallel\Events und parallel\Channel verwendet, um asynchrone, parallele Datenverarbeitung koordiniert zu steuern.
Beispiele
Ereignistyp im Event-Loop auswerten
<?php
use parallel\Runtime;
use parallel\Channel;
use parallel\Events;
use parallel\Events\Event\Type;
$channel = new Channel();
$runtime = new Runtime();
$runtime->run(function() use ($channel) {
$channel->send('Hallo aus dem parallelen Task!');
$channel->close();
});
$events = new Events();
$events->addChannel($channel);
$events->setBlocking(true);
while ($event = $events->poll()) {
switch ($event->type) {
case Type::Read:
echo "Gelesen: " . $event->value . PHP_EOL;
break;
case Type::Close:
echo "Kanal wurde geschlossen." . PHP_EOL;
break;
default:
echo "Anderer Ereignistyp: " . $event->type . PHP_EOL;
}
}
Future-Ergebnis über Events empfangen
<?php
use parallel\Runtime;
use parallel\Events;
use parallel\Events\Event\Type;
$runtime = new Runtime();
$future = $runtime->run(function() {
return 42;
});
$events = new Events();
$events->addFuture('myFuture', $future);
$events->setBlocking(true);
if ($event = $events->poll()) {
if ($event->type === Type::Read) {
echo "Future-Ergebnis: " . $event->value . PHP_EOL;
} elseif ($event->type === Type::Cancel) {
echo "Future wurde abgebrochen." . PHP_EOL;
} elseif ($event->type === Type::Error) {
echo "Fehler beim Future." . PHP_EOL;
}
}
// Wichtig · Fallstricke
Die verfügbaren Konstanten der Klasse sind:
Type::Read– Ein Wert wurde aus einem Kanal oder Future gelesen.Type::Write– Ein Wert wurde erfolgreich in einen Kanal geschrieben.Type::Close– Ein Kanal wurde geschlossen.Type::Cancel– Ein Future wurde abgebrochen (cancel()).Type::Kill– Eine Runtime wurde beendet (kill()).Type::Error– Es ist ein Fehler aufgetreten (z. B. eine Exception im parallelen Task).
Achtung: parallel\Events\Event\Type ist keine echte PHP-Enum (die erst ab PHP 8.1 existiert), sondern eine Klasse mit Integer-Klassenkonstanten. Der Vergleich sollte daher mit === erfolgen.
Das parallel-Framework erfordert die PECL-Erweiterung parallel und PHP mit ZTS (Zend Thread Safety). Es ist nicht im Standard-PHP enthalten.