ComponentiThreadPool::close()

ThreadPool::close()

(PHP 8.6+, True Async 1.0)

php
public ThreadPool::close(): void

Avvia un arresto controllato del pool. Dopo la chiamata a close():

  • Qualsiasi successiva chiamata a submit() lancia immediatamente Async\ThreadPoolException.
  • I task già presenti in coda continuano e vengono completati normalmente.
  • I task attualmente in esecuzione nei thread worker vengono completati normalmente.
  • Il metodo blocca la coroutine chiamante fino al completamento di tutti i task in corso e all'arresto di tutti i worker.

Per un arresto immediato e forzato che scarta i task in coda, usare cancel().

Valore restituito

void

Esempi

Esempio #1 Arresto controllato dopo l'invio di tutti i task

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(); // attende il completamento del task precedente

    echo await($future), "\n"; // finished

    $pool->close();
});

Esempio #2 L'invio dopo close() genera un'eccezione

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 "Errore: ", $e->getMessage(), "\n";
        // Errore: Cannot submit task: thread pool is closed
    }
});

Vedere anche