Scope::dispose
(PHP 8.6+, True Async 1.0)
php
public function dispose(): voidChiude lo scope e cancella tutte le coroutine al suo interno. Dopo aver chiamato dispose(), lo scope viene contrassegnato sia come chiuso che come cancellato. Non e' possibile aggiungere nuove coroutine a uno scope chiuso.
Per uno scope senza il flag dispose-safely (new Scope() per impostazione predefinita) questo equivale a chiamare cancel() seguito dalla chiusura dello scope. Uno scope che porta il flag, impostato da allowZombies() o ereditato da un genitore che lo possiede, come lo scope principale, lascia invece le sue coroutine in esecuzione come zombie, esattamente come disposeSafely().
Valore di ritorno
Non viene restituito alcun valore.
Esempi
Esempio #1 Chiusura forzata di uno scope
php
<?php
use Async\Scope;
$scope = new Scope();
$scope->spawn(function() {
try {
\Async\delay(60_000);
} catch (\Async\AsyncCancellation) {
echo "Coroutine cancellata al dispose\n";
}
});
// Tutte le coroutine saranno cancellate, scope chiuso
$scope->dispose();
var_dump($scope->isClosed()); // bool(true)
var_dump($scope->isCancelled()); // bool(true)Esempio #2 Pulizia in un blocco try/finally
php
<?php
use Async\Scope;
$scope = new Scope();
try {
$scope->spawn(function() {
// Logica di business
\Async\delay(5000);
});
$scope->awaitCompletion(Async\timeout(5000));
} finally {
$scope->dispose();
}Vedi anche
- Scope::disposeSafely — Chiusura sicura (con zombie)
- Scope::disposeAfterTimeout — Chiusura dopo un timeout
- Scope::cancel — Cancella senza chiudere lo scope