Init
This commit is contained in:
69
content/core-concepts/tasks/_index.fr.md
Normal file
69
content/core-concepts/tasks/_index.fr.md
Normal file
@@ -0,0 +1,69 @@
|
||||
---
|
||||
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));
|
||||
});
|
||||
});
|
||||
```
|
||||
Reference in New Issue
Block a user