Méthode asynchrone à retourner true ou false dans une Tâche
Je sais qu'un async
méthode ne peut revenir void
ou Task
. J'ai lu des méthodes similaires pour le traitement d'Exception à l'intérieur de async
méthodes. Et je suis nouveau sur async
de programmation, donc je suis à la recherche d'une solution simple et efficace.
Mon async
méthode exécute une requête Sql. Si la requête a été ok, il devrait en informer l'appelant avec un Booléen true
et sinon un false
. Ma méthode est actuellement un vide donc je n'ai aucun moyen de le savoir.
private async void RefreshContacts()
{
Task refresh = Task.Run(() =>
{
try
{
//run the query
}
catch { }
}
);
await refresh;
}
Je voudrais simplement changer async
à Task
de sorte que, dans mon catch
instruction, la méthode renvoie un false
et sinon un true
.
OriginalL'auteur disasterkid | 2015-07-20
Vous devez vous connecter pour publier un commentaire.
Il semble que vous juste besoin de retourner un
Task<bool>
alors:Personnellement, je ne voudrais pas attraper l'exception, au lieu de laisser l'appelant vérifiez la tâche d'un reproché à l'etat, mais c'est une autre affaire.
catch { return false; }
après changement de mon type de retour deTask<bool>
j'ai eu ce message d'avertissement: "Parce que cet appel n'est pas attendue, de l'exécution de la méthode actuelle se poursuit avant que l'appel est terminé. Envisager l'application de la 'attendre' opérateur à l'issue de l'appel."La vérification de la Tâche pour un reproché à l'état semble le plus intéressant, peut vous apporter un exemple simple?
Où obtenez-vous de cette mise en garde, et avez-vous essayé de suivre ses conseils? Comme pour la vérification de la tâche pour un reproché à l'état - voir la documentation pour
Task
. Bien que si vous attendez la tâche, l'exception sera levée de nouveau à la place.L'avertissement s'affiche partout, j'ai appelé la méthode
RefreshContacts()
Si j'ajoute attendent avant chaque appel, est-ce que je dois changer toutes les fonctions de cette fonction asynchrone?Oui. Il semble que vous fondamentalement besoin de prendre du recul et de réfléchir à ce que signifie pour actualiser les contacts de manière asynchrone...
OriginalL'auteur Jon Skeet
Changer la signature de la méthode de
Task<bool>
. Ensuite, si votre méthode est déclarée comme async vous pouvez simplement retourner une valeur booléenne. Mais comme jon skeet dit il y a des autres, peut-être de meilleures façons de gérer votre szenarioPS: une Autre question, vous serez peut-être ont est si vous avez une méthode sans asynchrone. Ensuite, vous pouvez revenir
Task.FromResult(true)
comme ceci:catch { return false; }
après changement de mon type de retour deTask<bool>
j'ai eu ce message d'avertissement: "Parce que cet appel n'est pas attendue, de l'exécution de la méthode actuelle se poursuit avant que l'appel est terminé. Envisager l'application de la 'attendre' opérateur à l'issue de l'appel."Ce message n'a rien à voir avec l'instruction catch. Très probablement, vous n'avez pas d'appels asynchrones dans le
try
partie. Dans ce cas, il n'y a pas de point à l'aide deasync
ou des Tâches.OriginalL'auteur Boas Enkler
Désolé, mais je pense que y'all tromper les gens ici.
Voir l'article Microsoft, ici.
Exemple très simple qui montre comment on peut renvoyer une valeur de type bool ou de type chaîne de caractères à partir d'une Tâche.
Je vous poste le code C# ici, pour la postérité:
OriginalL'auteur woohoo