"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Async / attendre Utilisation: tâche ou vide?

Async / attendre Utilisation: tâche ou vide?

Publié le 2025-04-15
Parcourir:412

Async/Await: Should I Return a Task or Void?

Retour de la valeur de la méthode async / attend: tâche ou void?

Dans la programmation asynchrone, si la valeur de retour de la méthode async est tâche ou void a un impact significatif. Cet article explorera les scénarios que chaque option s'applique.

return la tâche

Habituellement, la méthode async doit renvoyer tâche . Cela permet au code attendre d'être appelé et de suivre ses progrès si nécessaire. L'exception principale à cette règle est lorsque vous avez explicitement besoin du type de retour void , comme lors de la gestion des événements.

return void

Taguez-le comme "Opération asynchrone de niveau supérieur" en utilisant la méthode void return type . Ces opérations se comportent différemment lorsque des exceptions se produisent. Contrairement à la tâche de la valeur de retour, les exceptions dans la méthode asynchrone void ne sont pas observées par défaut. Ils deviennent des exceptions non performes et peuvent déclencher le manageur taskscheduler.unoBservedTaskException .

Considérez l'exemple suivant:

public static async void AsyncMethod2(int num)
{
    await Task.Factory.StartNew(() => Thread.Sleep(num));
}
Dans cet exemple, le

async et attendent les mots clés ne sont pas nécessaires car l'exception n'est pas obligatoire pour être gérée explicitement. Cependant, si une exception se produit, elle ne sera pas observée et peut ne pas être gérée correctement.

Exemple d'exception Exemple ]

pour démontrer la différence de gestion des exceptions entre

tâche et void méthodes asynchrones, considérez le code suivant:

static async void f()
{
    await h();
}

static async Task g()
{
    await h();
}

static async Task h()
{
    throw new NotImplementedException();
}
Si

f ] est appelé, l'exception est observée et traitée comme toute autre exception non perdue. Cependant, si g ] est appelé, l'exception n'est jamais observée et sera gérée par le gestionnaire taskscheduler.unoBservedTaskException , ce qui entraînera un comportement non défini.

meilleures pratiques

En tant que meilleure pratique générale, renvoie toujours

tâche de la méthode async sauf si vous avez explicitement besoin du type de retour void . Cela garantit que l'exception est gérée correctement et que l'appelant peut sélectionner attendre la tâche et suivre ses progrès.

Pour plus de détails, veuillez vous référer à la documentation de Microsoft sur

async / attendre les meilleures pratiques: https://learn.microsoft.com/en-us/archive/msdn-magazine/2013/march/async-await-best-pactices-in-asynchronous-programming

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3