Coroutine::finally

(PHP 8.6+, True Async 1.0)

public Coroutine::finally(\Closure $callback): void

코루틴이 완료될 때 결과에 관계없이(성공, 오류 또는 취소) 호출될 콜백 함수를 등록합니다.

finally() 호출 시점에 코루틴이 이미 완료된 경우, 콜백은 즉시 실행됩니다.

여러 핸들러를 등록할 수 있으며, 추가된 순서대로 실행됩니다.

매개변수

callback
핸들러 함수입니다. 코루틴 객체를 인수로 받습니다.

예제

예제 #1 기본 사용법

<?php

use function Async\spawn;
use function Async\await;

$coroutine = spawn(function() {
    return "test result";
});

$coroutine->finally(function() {
    echo "Coroutine completed\n";
});

await($coroutine);

예제 #2 리소스 정리

<?php

use function Async\spawn;
use function Async\await;

$connection = connectToDatabase();

$coroutine = spawn(function() use ($connection) {
    return $connection->query('SELECT * FROM users');
});

$coroutine->finally(function() use ($connection) {
    $connection->close();
    echo "Connection closed\n";
});

$result = await($coroutine);

예제 #3 다중 핸들러

<?php

use function Async\spawn;
use function Async\await;

$coroutine = spawn(fn() => "done");

$coroutine->finally(fn() => echo "Handler 1\n");
$coroutine->finally(fn() => echo "Handler 2\n");
$coroutine->finally(fn() => echo "Handler 3\n");

await($coroutine);
// Output:
// Handler 1
// Handler 2
// Handler 3

예제 #4 완료 후 등록

<?php

use function Async\spawn;
use function Async\await;

$coroutine = spawn(fn() => 42);
await($coroutine);

// 코루틴이 이미 완료됨 -- 콜백이 즉시 실행됨
$coroutine->finally(function() {
    echo "Called immediately\n";
});

같이 보기