J'ai une question stupide de demander à chacun d'apprendre de meilleures pratiques types de retour async dans C #. J'ai une méthode comme celle-ci:
public virtual async Task OnConnected(WebSocket socket, HttpContext context)
{
string connectionId = CreateConnectionId(context);
ConnectionManager.AddSocket(connectionId, socket);
//Question is here await what ?
}
3 Réponses :
S'il n'y a rien à pourquoi ne rien faire? P> parce que lorsque vous placez un ou vous pouvez supprimer le mon conseil serait être de faire le premier, (ne rien faire) p> Toutefois, si vous alliez aller la deuxième approche, il serait préférable de placer toutes les exceptions sur la tâche retournée em> tout comme les Async et attendre le motif em> serait. p> attendre code> et ceci est une méthode remplacée. Il suffit d'ignorer l'avertissement du compilateur (ou pragma code> est sorti) et ne faites rien) et ne faites rien. async code> Sur une méthode, le compilateur place automatiquement toute exception sur la tâche pour vous. p> async code> et renvoyer une tâche complétée em> p>
Je me souviens que dans ce lien: markheath.net/post/async-antifatterns a dit que l'anti- Le motif est d'essayer de prendre sans attendre. Est-ce que ça va pour ce cas
@Khanhtuong si la méthode n'est pas async code> alors vous ne pouvez pas attendre code>. Toutefois, dans le deuxième exemple, nous marquons que nous placons des exceptions sur la tâche de la même manière que l'async async et l'attente de modèle i> .. une fois encore, si vous n'êtes pas sûr dans ce cas, ne faites rien
Si vous n'avez aucune opération asynchrone à attendre, vous pouvez également faire la méthode de méthode synchrone normale. Si vous faites une méthode async, il est donc bon de nommer la méthode de telle sorte qu'il se termine par ASYNC comme OnconnecteAsync. P>
Généralement, vous utilisez des méthodes asynchronisées / attendre lorsque vous avez des opérations d'E / S (comme accès au fichier, téléchargement Web / téléchargement) pouvant être effectuée indépendamment de votre logique de programme. Mettez simplement le flux de contrôle va comme, P>
Vous pouvez parcourir de nombreuses vidéos de tutoriels sur YouTube sur Async / Await. P>
Apprenez quelques meilleures pratiques Types de retour ASYNC en C #. P> blockQuote>
La première règle de
async code> est "ne l'utilise pas à moins que vous n'ayez besoin." La deuxième règle est "Commencez parattendre code>, pasasync code>". P>Cette partie de la question est incorrecte: p>
// question est ici attendu quoi? p> blockQuote>
au lieu de commencer avec
async code> et d'essayer de "rendre le code asynchrone", vous devez commencer à l'extrémité opposée: identifier ce qui est naturellement em> asynchrone (c'est-à-dire ce que vous avez Devraitattendre code>) d'abord. Vous avez besoin de quelque chose surattendre code> avant em> faire votre code asynchrone. P>vous devrait em> utiliser
attendre code> si vous avez des travaux naturellement asynchrones à faire. Ceci est généralement basé sur des I / O, donc si vous appelez une API ou si vous faites une requête de base de données, ce serait quelque chose qui peut être rendu asynchrone. Une fois que vous avez identifié l'appel d'E / S à bas niveau, modifiez la méthode pour appeler la version asynchrone de cette API et ajouter unattendre code>. Le compilateur vous guidera à partir de là, modifiant la méthode contenant leattendre code> pour êtreasync code> et modifier son type de retour à partir devide code> àTâche code> out code> àtâchecode>. Ensuite, Laissez async code> /. p>attendre code> se développer naturellement via votre codebase
" question est ici attendre ce que i>" rien, vous n'avez rien à attendre ici (que vous avez montré), car il se trouve cette méthode n'a pas besoin de renvoyer une tâche code> ou être
async code>. En outre, nous nous demandons de ne pas dire que la bowevote est une invitation ouverte à la bowevoteVotre méthode a-t-elle une certaine implémentation asynchrounour ou appeler des méthodes sont asynchronisées?
@ EHSAN SAJJAD: Ma méthode n'a pas d'async logique et cette méthode est remplacée de la classe de base a un modificateur ASYNC
Peut-être une petite lecture ferait :) Async Tâches < / a>
Même si vous avez dit de ne pas frapper, mais une question comme celle-ci prouve que vous n'avez effectué aucune recherche sur Async-attendre et attendre que quelqu'un vous nourrit. Le Créateur de C #, MS a leur propre aide pour vous. docs.microsoft.com/en-us/archive/msdn-magazine/2013/march/... ou peut être moyen.com/@deep_blue_day/...
@ Michael Randall: Ma méthode n'a pas de logique ASYNC et cette méthode est remplacée de la classe de base contient un modificateur ASYNC et un avertissement IDE Cette méthode doit avoir un modificateur ASYNC. Devrais-je attendre la tâche.delay (0) ou attendre la tâche.comPletedTask, est-ce que ça va?
tks tellement
@ Codeur sans cerveau sans cervelle: J'ai déjà étudié de quelques meilleures pratiques, mais je n'ai plus d'expérience à ce sujet et j'aimerais poster pour demander à quelqu'un de m'aider et que je suis très heureux. BTW TKS pour votre aide et vos ressources