CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C#] async et await

GameWaifus2
GameWaifus2
Niveau 27
21 octobre 2020 à 17:11:23

Bonjour,

Je suis en train de dev un serveur de jeu avec des connaissances pas parfaites, ce sera destiné à accueillir plusieurs dizaines de joueurs en même temps, avec beaucoup d'interactions de bases de données. Je me demandais justement quand est-ce qu'il était judicieux d'utiliser les fonctions asynchrones pour optimiser les performances et la qualité du streaming du serveur vers les clients ?

Sur le papier je me dis : ah bah, il vaudrait mieux les utiliser partout pour toutes mes requêtes SQL, ça crée une sorte de thread temporaire sans bloquer le thread principal, super ! :hap:
Mais dans la pratique j'imagine que ce n'est pas comme ça que ça marche ? :noel:

Des personnes expérimentées pour m'aiguiller ? :ange:

boucif
boucif
Niveau 24
21 octobre 2020 à 21:33:14

C'est quoi comme serveur que tu dev ?
sur un serveur asp classique les requêtes sont déjà en parallèle normalement, c'est si au sein d'une même fonction tu fais plusieurs opération lourde que c'est intéressant.
Faire un traitement async de bout en bout n'est pas très compliqué beaucoup de méthodes du framework ont un équivalent asynchrone.

Vargileus
Vargileus
Niveau 9
21 octobre 2020 à 22:08:52

Je fais du dev .net sur une grosse archi, on utilise async par défaut à moins d'avoir une très bonne raison de faire autrement (c'est à dire jamais).

Au contraire, ne pas les utiliser peut être source de bugs (vécu)

GameWaifus2
GameWaifus2
Niveau 27
21 octobre 2020 à 22:58:30

Le 21 octobre 2020 à 21:33:14 boucif a écrit :
C'est quoi comme serveur que tu dev ?
sur un serveur asp classique les requêtes sont déjà en parallèle normalement, c'est si au sein d'une même fonction tu fais plusieurs opération lourde que c'est intéressant.
Faire un traitement async de bout en bout n'est pas très compliqué beaucoup de méthodes du framework ont un équivalent asynchrone.

Un serveur GTA V :hap:
Actuellement en C#; connecté à ma base de données MySQL, j'utilise les classes MySqlCommand et MySqlDataReader pour lire les données, utilisant leurs fonctions ExecuteNonQuery() et ExecuteReader(), mais j'ai vu qu'elles avaient des équivalents en asynchrones : ExecuteNonQueryAsync() et ExecuteReaderAsync(), donc j'imagine qu'elles ne font pas l'asynchrone "naturellement" ! :noel:

Le 21 octobre 2020 à 22:08:52 Vargileus a écrit :
Je fais du dev .net sur une grosse archi, on utilise async par défaut à moins d'avoir une très bonne raison de faire autrement (c'est à dire jamais).

Au contraire, ne pas les utiliser peut être source de bugs (vécu)

Okay donc tu me confirmes que je dois faire de l'asynchrone pratiquement tout le temps ?
Très bien! :noel:

Ded9
Ded9
Niveau 1
22 octobre 2020 à 12:27:11

Bonjour, je peux tenter de t'aider du mieux que je peux.
Concernant ta première question, en utilisant [Roslyn] comme compilateur tu a tout intérêt à utiliser async await, c'est optimisé pour, donc fonce. Evite ContinueWith et n'utilise jamais async void à moins que ce sois du top-level.
Pour ta deuxième préoccupation, tu pourrais peut être utiliser Ado.NET et ses méthodes asynchrones, avec un framework récent tout est orienté async.

Ded9
Ded9
Niveau 1
22 octobre 2020 à 12:33:27

je sais pas trop si c'est autorisé mais j'ai retrouvé un lien github vers un guide d'un architecte logiciel de chez Microsoft : https://github.com/davidfowl/AspNetCoreDiagnosticScenarios/blob/master/AsyncGuidance.md

boucif
boucif
Niveau 24
22 octobre 2020 à 12:36:54

Oui préfère la méthode async si elle est dispo.

Vargileus sur ta grosse archi vous utilisés quelles technos.
Perso je me monte un serveur avec signalr, et une simple base postgres pour le moment, à voir pour faire du microservice et une base nosql par la suite.

GameWaifus2
GameWaifus2
Niveau 27
22 octobre 2020 à 16:27:42

Merci à tous pour vos réponses! Je réécris petit à petit tout mes objets pour profiter de l'asynchrone, en revanche, je ne suis pas sûr d'avoir très bien compris l'utilité du mot clef "await" :hap:

Lorsqu'il rencontre une instruction await, le thread ne fera plus rien tant qu'il n'aura pas accomplit cette instruction ?

godrik
godrik
Niveau 30
22 octobre 2020 à 17:15:49

L'utilisation est bien expliquer la:

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/

De facon general, tu veux utiliser des calculs asynchrones quand tu as deux choses que tu peux faire en meme temps et une des deux chose a besoin d'attendre le resultat d'un service exterieur.

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment