--- title: Tâches type: docs weight: 3 --- Le système de tâches dans Hytale gère les opérations asynchrones en utilisant les APIs de concurrence standard de Java. {{< cards >}} {{< card link="task-registry" title="TaskRegistry" subtitle="Enregistrement et suivi des tâches" >}} {{< card link="async-operations" title="Opérations Async" subtitle="Patterns async thread-safe" >}} {{< /cards >}} ## Aperçu {{< callout type="warning" >}} **Important :** TaskRegistry n'a PAS de méthodes `runAsync()`, `runSync()`, `runLater()`, ou `runRepeating()`. Hytale utilise les APIs standard Java `CompletableFuture` et `ScheduledExecutorService`. {{< /callout >}} Le TaskRegistry permet aux plugins de : - **Enregistrer des tâches** - Suivre les `CompletableFuture` et `ScheduledFuture` pour le nettoyage - **Opérations async** - Utiliser `CompletableFuture.runAsync()` - **Opérations différées** - Utiliser `CompletableFuture.delayedExecutor()` - **Opérations répétitives** - Utiliser `ScheduledExecutorService` ## Démarrage Rapide ```java // Exécuter une opération async CompletableFuture.runAsync(() -> { // Code thread d'arrière-plan Data result = computeExpensiveData(); // Retourner au thread du monde pour les changements d'état du jeu world.execute(() -> { playerRef.sendMessage(Message.raw("Résultat : " + result)); }); }); // Opération différée (3 secondes) CompletableFuture.delayedExecutor(3, TimeUnit.SECONDS) .execute(() -> { world.execute(() -> { // Code différé sur le thread du monde }); }); ``` ## Concepts Clés {{< callout type="warning" >}} **Sécurité des Threads :** Chaque World s'exécute sur son propre thread dédié. Utilisez toujours `world.execute()` lors de la modification de l'état du jeu (joueurs, entités, blocs) depuis du code async. La manipulation directe depuis des threads async peut causer des crashs ou corruption de données. {{< /callout >}} ```java // Pattern correct PlayerRef playerRef = player.getPlayerRef(); World world = player.getWorld(); CompletableFuture.runAsync(() -> { // Faire le calcul lourd ici (thread d'arrière-plan) Data result = computeExpensiveData(); // Retourner au thread du monde pour les changements d'état du jeu world.execute(() -> { playerRef.sendMessage(Message.raw("Résultat : " + result)); }); }); ```