Coroutine::cancel
(PHP 8.6+, True Async 1.0)
php
public Coroutine::cancel(?Async\AsyncCancellation $cancellation = null): voidAnnule l'exécution de la coroutine. La coroutine recevra une exception AsyncCancellation au prochain point de suspension (suspend, await, delay, etc.).
L'annulation fonctionne de manière coopérative -- la coroutine n'est pas interrompue instantanément. Si la coroutine se trouve dans protect(), l'annulation est différée jusqu'à la fin de la section protégée.
Paramètres
cancellation : L'exception servant de motif d'annulation. Si null, une AsyncCancellation par défaut est créée.
Exemples
Exemple #1 Annulation simple
php
<?php
use function Async\spawn;
use function Async\suspend;
use function Async\await;
$coroutine = spawn(function() {
try {
Async\delay(10000);
} catch (\Async\AsyncCancellation $e) {
echo "Cancelled: " . $e->getMessage() . "\n";
}
});
suspend();
$coroutine->cancel();
await($coroutine);Exemple #2 Annulation avec motif
php
<?php
use function Async\spawn;
use function Async\await;
$coroutine = spawn(function() {
Async\delay(10000);
});
$coroutine->cancel(new \Async\AsyncCancellation("Timeout exceeded"));
try {
await($coroutine);
} catch (\Async\AsyncCancellation $e) {
echo $e->getMessage() . "\n"; // "Timeout exceeded"
}Exemple #3 Annulation avant le démarrage
php
<?php
use function Async\spawn;
use function Async\await;
$coroutine = spawn(function() {
return "should not complete";
});
// Annuler avant que l'ordonnanceur ne démarre la coroutine
$coroutine->cancel();
try {
await($coroutine);
} catch (\Async\AsyncCancellation $e) {
echo "Coroutine cancelled before start\n";
}Voir aussi
- Coroutine::isCancelled -- Vérifier l'annulation
- Coroutine::isCancellationRequested -- Vérifier la demande d'annulation
- Cancellation -- Concept d'annulation
- protect() -- Section protégée