* * @internal */ final class Canary { private \Closure $canceller; public function __construct(\Closure $canceller) { $this->canceller = $canceller; } public function cancel() { if (isset($this->canceller)) { $canceller = $this->canceller; unset($this->canceller); $canceller(); } } public function __destruct() { $this->cancel(); } }