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
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éthode | Description |
|---|---|
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 etpendingest renvoyé ; un verrou mais pas encore de résultat → toujourspending, sans relancer une deuxième fois le même processus ; un fichier de résultat →done(ouerror), lu et renvoyé directement.