ComposantsThreadPool::close()

ThreadPool::close()

(PHP 8.6+, True Async 1.0)

php
public ThreadPool::close(): void

Initie un arrêt gracieux du pool. Après l'appel à close() :

  • Tout appel ultérieur à submit() lève immédiatement une Async\ThreadPoolException.
  • Les tâches déjà dans la file continuent et se terminent normalement.
  • Les tâches en cours d'exécution dans les threads de travail se terminent normalement.
  • La méthode bloque la coroutine appelante jusqu'à ce que toutes les tâches en cours soient terminées et que tous les workers se soient arrêtés.

Pour un arrêt immédiat et forcé qui abandonne les tâches en file, utilisez plutôt cancel().

Valeur de retour

void

Exemples

Exemple #1 Arrêt gracieux après la soumission de toutes les tâches

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(); // attend que la tâche ci-dessus se termine

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

    $pool->close();
});

Exemple #2 Soumettre après close lève une exception

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

Voir aussi