ThreadPool::close()
(PHP 8.6+, True Async 1.0)
php
public ThreadPool::close(): voidИнициирует плановое завершение работы пула. После вызова close():
- Любой последующий вызов
submit()немедленно выбрасываетAsync\ThreadPoolException. - Задачи, уже находящиеся в очереди, продолжают выполняться и завершаются в штатном режиме.
- Задачи, выполняющиеся в рабочих потоках в данный момент, завершаются в штатном режиме.
- Метод блокирует вызывающую корутину до завершения всех выполняющихся задач и остановки всех рабочих потоков.
Для немедленного принудительного завершения с отбрасыванием задач в очереди используйте cancel().
Возвращаемое значение
void
Примеры
Пример #1 Плановое завершение после отправки всех задач
php
<?php
use Async\ThreadPool;
use function Async\spawn;
use function Async\await;
spawn(function() {
$pool = new ThreadPool(workers: 2);
$future = $pool->submit(function() {
return 'finished';
});
$pool->close(); // ожидает завершения задачи выше
echo await($future), "\n"; // finished
$pool->close();
});Пример #2 Вызов submit после close выбрасывает исключение
php
<?php
use Async\ThreadPool;
use Async\ThreadPoolException;
use function Async\spawn;
spawn(function() {
$pool = new ThreadPool(workers: 2);
$pool->close();
try {
$pool->submit(fn() => 'too late');
} catch (ThreadPoolException $e) {
echo "Error: ", $e->getMessage(), "\n";
// Error: Cannot submit task: thread pool is closed
}
});Смотрите также
- ThreadPool::cancel() — принудительное завершение
- ThreadPool::isClosed() — проверить, закрыт ли пул
- Async\ThreadPool — обзор компонента