vendredi 13 février 2026

Task vs ValueTask

 

Task et ValueTask sont deux façons de représenter une opération asynchrone qui peut se compléter dans le futur, mais elles ont des différences importantes de performance et d’usage. Voyons ça en détail.


1. Task

  • Type référence (class) qui représente une opération asynchrone.

  • Toujours alloué sur le heap.

  • Peut être awaité avec await.

  • Facile à utiliser et très courant.

  • Supporte la composition, comme Task.WhenAll et Task.WhenAny.

Exemple :

async Task<int> GetNumberAsync() { await Task.Delay(1000); return 42; } int result = await GetNumberAsync(); Console.WriteLine(result); // 42

Points clés :

  • Allocation sur le heap → un peu plus lourd si beaucoup de petites tâches rapides.

  • Toujours sûr pour les opérations qui doivent être awaitées plusieurs fois.


2. ValueTask

  • Type struct (valeur type) → peut éviter des allocations sur le heap pour des tâches très rapides ou souvent synchrones.

  • Peut être awaité comme un Task.

  • Recommandé quand la tâche peut se terminer immédiatement ou retourner un résultat déjà disponible.

  • Attention : si vous attendez plusieurs fois le même ValueTask, vous devez le convertir en Task (AsTask()), sinon comportement indéfini.

Exemple :

async ValueTask<int> GetNumberFastAsync(bool cached) { if (cached) return 42; // pas de Task allouée await Task.Delay(1000); return 43; } int result = await GetNumberFastAsync(true); Console.WriteLine(result); // 42

Points clés :

  • Réduit les allocations heap pour les opérations rapides.

  • Moins flexible que Task si vous devez réutiliser ou combiner la tâche.

  • Ne pas utiliser pour des tâches longues ou partagées à plusieurs endroits.


3. Comparaison rapide

CaractéristiqueTaskValueTask
TypeReference type (class)Value type (struct)
Allocation heapOuiNon si résultat immédiat
RéutilisableOuiNon, il ne doit pas être awaité plusieurs fois
Usage recommandéToutes opérations asynchronesOpérations très rapides ou souvent synchrones
Composition (WhenAll, etc.)FacileMoins pratique, doit convertir en Task

Règle pratique

  • Task → sûr, simple, standard pour la plupart des cas.

  • ValueTask → optimisation pour micro-performances, surtout si beaucoup de tâches se terminent immédiatement.

Aucun commentaire:

Enregistrer un commentaire

Task vs ValueTask Lượt xem: