Skip to content

AsyncTask ​

Async

Engine\Native\AsyncTask est ce que ce framework a de plus proche d'un isolate Dart : un vrai processus OS séparé (proc_open()), sans aucune mémoire partagée avec la requête qui l'a mis en file. Il n'y a ici aucune astuce de sérialisation de closure — le travail est une simple référence classe::méthode plus des arguments JSON-safe, exécutée par public/async-runner.php comme son propre processus. C'est une classe finale sans constructeur : toute l'API est statique, pensée pour être appelée depuis Async (voir cette page pour l'usage réel côté widget) plutôt que directement dans un écran.

Exemple ​

php
<?php

use Engine\Native\AsyncTask;

final class WeatherFetcher
{
    public static function fetch(string $city): array
    {
        // Appel HTTP lent, exécuté dans le processus enfant — jamais
        // dans la requête qui a appelé AsyncTask::poll().
        $response = file_get_contents("https://api.example.com/weather?city={$city}");

        return json_decode($response, true);
    }
}

$result = AsyncTask::poll('weather-cotonou', WeatherFetcher::class, 'fetch', ['Cotonou']);
// $result === ['status' => 'pending', 'data' => null, 'error' => null]
// … puis, une fois le processus enfant terminé :
// $result === ['status' => 'done', 'data' => [...], 'error' => null]

Le premier appel à poll() lance WeatherFetcher::fetch() dans un processus détaché et renvoie immédiatement pending ; les appels suivants (typiquement un par rendu, via Async) renvoient pending tant que le fichier de résultat n'existe pas, puis done avec les données une fois le processus terminé.

Méthodes ​

MéthodeDescription
static poll(taskKey, handlerClass, handlerMethod, args = [])Vérifie l'état d'une tâche ; la lance si elle n'existe pas encore. Retourne `{status: pending
static reset(taskKey)Efface le résultat/verrou en cache d'une tâche pour qu'un prochain poll() la relance de zéro.
static resultPathFor(taskKey)Chemin du fichier JSON de résultat pour une taskKey donnée.

À savoir. Trois états possibles à chaque poll() : aucun fichier de résultat ni de verrou → la tâche est lancée et pending est renvoyé ; un verrou mais pas encore de résultat → toujours pending, sans relancer une deuxième fois le même processus ; un fichier de résultat → done (ou error), lu et renvoyé directement.

Voir aussi ​

PhpNitro est un produit FINANFA TECH — Publié sous licence MIT.