ThreadPool::close()
(PHP 8.6+, True Async 1.0)
php
public ThreadPool::close(): voidLeitet ein geordnetes Herunterfahren des Pools ein. Nachdem close() aufgerufen wurde:
- Jeder nachfolgende
submit()-Aufruf wirft sofortAsync\ThreadPoolException. - Aufgaben, die sich bereits in der Warteschlange befinden, werden normal fortgesetzt und abgeschlossen.
- Aufgaben, die derzeit in Worker-Threads ausgeführt werden, werden normal abgeschlossen.
- Die Methode blockiert die aufrufende Coroutine, bis alle laufenden Aufgaben abgeschlossen und alle Worker gestoppt sind.
Für ein sofortiges, hartes Herunterfahren, bei dem Aufgaben in der Warteschlange verworfen werden, verwenden Sie stattdessen cancel().
Rückgabewert
void
Beispiele
Beispiel #1 Geordnetes Herunterfahren nach dem Einreichen aller Aufgaben
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(); // wartet auf den Abschluss der obigen Aufgabe
echo await($future), "\n"; // finished
$pool->close();
});Beispiel #2 Submit nach close wirft eine Ausnahme
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 "Fehler: ", $e->getMessage(), "\n";
// Error: Cannot submit task: thread pool is closed
}
});Siehe auch
- ThreadPool::cancel() — Hartes/erzwungenes Herunterfahren
- ThreadPool::isClosed() — Prüfen, ob der Pool geschlossen ist
- Async\ThreadPool — Komponentenübersicht