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 关闭后提交将抛出异常
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 — 组件概述