КомпонентиScope::dispose

Scope::dispose ​

(PHP 8.6+, True Async 1.0)

php
public function dispose(): void

Закриває область видимості та скасовує всі її корутини. Після виклику dispose() область видимості позначається як закрита та скасована. Нові корутини не можуть бути додані до закритої області видимості.

Для області видимості без прапорця dispose-safely (new Scope() за замовчуванням) це еквівалентно виклику cancel() з подальшим закриттям області видимості. Область видимості з прапорцем, увімкненим через allowZombies() або успадкованим від батька з прапорцем, наприклад від головної (main) області видимості, замість скасування залишає корутини працювати як zombie, так само як disposeSafely().

Значення, що повертається ​

Значення не повертається.

Приклади ​

Приклад #1 Примусове закриття області видимості ​

php
<?php

use Async\Scope;

$scope = new Scope();

$scope->spawn(function() {
    try {
        \Async\delay(60_000);
    } catch (\Async\AsyncCancellation) {
        echo "Coroutine cancelled on dispose\n";
    }
});

// All coroutines will be cancelled, scope closed
$scope->dispose();

var_dump($scope->isClosed());    // bool(true)
var_dump($scope->isCancelled()); // bool(true)

Приклад #2 Очищення в блоці try/finally ​

php
<?php

use Async\Scope;

$scope = new Scope();

try {
    $scope->spawn(function() {
        // Business logic
        \Async\delay(5000);
    });

    $scope->awaitCompletion(Async\timeout(5000));
} finally {
    $scope->dispose();
}

Дивіться також ​