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 .
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.
async /
attendre les meilleures pratiques:
https://learn.microsoft.com/en-us/archive/msdn-magazine/2013/march/async-await-best-pactices-in-asynchronous-programming
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