Coroutine::cancel
(PHP 8.6+, True Async 1.0)
public Coroutine::cancel(?Async\AsyncCancellation $cancellation = null): void
Annule 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, uneAsyncCancellationpar défaut est créée.
Exemples
Exemple #1 Annulation simple
<?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
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
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