2016-05-16 1 views
1

J'ai beaucoup de méthodes asynchrones dans mon code de serveur, mais je suspecte que j'ai des appelants sans attente.Trouver l'attente manquante dans la solution

Existe-t-il un moyen simple d'analyser le code pour les appels où l'attente est manquante?

public async Task DomeSomethingAsync() 
{ 
    var result = await GetResult(); 
    await StoreResult(result); 
} 

puis quelque part j'ai oublié d'utiliser; J'espérais qu'il y avait une manière intelligente d'identifier ces appels erronés.

+0

@Frode: Roslyn est-il requis spécifiquement? ou tout moyen raisonnable de les trouver est OK? Si vous n'avez pas besoin de Roslyn, veuillez enlever cela de la question, cela fera bien comprendre que les réponses comme de Charles sont bonnes – quetzalcoatl

+0

Bon à savoir. Quand vous utilisez le resharper pendant longtemps, vous commencez à bousiller ce qui est fait et ce qui ne l'est pas :) – Evk

Répondre

6

Cela devrait être montré comme CS4014 d'avertissement du compilateur avec le texte:

Parce que cet appel ne l'attend pas, l'exécution de la méthode actuelle se poursuit avant que l'appel soit terminé. Envisagez d'appliquer l'opérateur 'await' au résultat de l'appel.

Voir the documentation

Donc, tout ce que vous avez besoin de faire est de compiler le code. VS devrait vous permettre de naviguer vers les emplacements pertinents à partir de sa liste d'erreurs.

+1

C'est évidemment le meilleur moyen. La raison pour laquelle je n'ai pas reçu cet avertissement était que j'avais des fonctions qui renvoyaient Task mais n'étaient pas asynchrones. Je viens de renvoyer Task.CompletedTask pour une raison quelconque. Fait les async maintenant. – Frode

1

Si la méthode n'en contient même pas un, vous pouvez vérifier la fenêtre de sortie. Après la compilation, vous trouverez l'avertissement This async method lacks 'await' operators and will run synchronously .... Double-cliquez sur cet avertissement pour accéder à la méthode appropriée.

2

Le moyen le plus simple de tous les trouver est de simplement compiler le code.

Toute fonction asynchrone mais sans attente à l'intérieur provoque compiler warning CS4014, une fois que vous avez compilé votre projet dans la liste des avertissements et vous verrez toutes les fonctions que vous devez corriger.

1

Vrai que vous obtiendrez l'avertissement MAIS si votre application fonctionne sans attendre ces fonctions peut-être vous ne voulez pas les attendre, il suffit d'assigner la tâche résultante à une variable pour désactiver l'avertissement dont les gars vous ont parlé.

Évidemment, c'est à vous de décider.