Question

J'ai une compréhension de base du multi-threading, mais je n'ai jamais eu à faire autre chose que de simples minuteries dans une application.Est-ce que quelqu'un connaît une bonne ressource qui me expliquera comment travailler avec des applications multithread, en expliquant les bases et en posant peut-être certaines des choses les plus difficiles ?

Était-ce utile?

La solution

Il s'agit d'une excellente ressource gratuite de Joseph Albahari. Threading en C#

Autres conseils

Deux superbes articles :

Ce que chaque développeur doit savoir sur les applications multithread
Comprendre l'impact des techniques de faible verrouillage dans les applications multithread

Bien que cet article ne corresponde pas exactement à ce que vous recherchez spécifiquement, nous espérons qu'il vous sera utile de manière générale (c'est-à-direil est connexe et une très bonne lecture) :

Le déjeuner gratuit est terminé :Un tournant fondamental vers la concurrence dans les logiciels

Il existe 4 manières de base de synchroniser les threads dans .Net :

  • Contrôle BackgroundWorker
  • Poignées d'attente
  • Fonctions de rappel
  • interroger un objet ASyncResult

En général, vous voulez commencer en haut de cette liste et descendre.Cela signifie d’abord regarder et voir si un contrôle backgroundworker est approprié à la situation.Cependant, cela suppose à peu près les formulaires Windows et que vous ne créez qu'un seul nouveau thread.

Alors essayez ensuite les poignées d'attente.Les poignées d'attente sont utiles pour coordonner plusieurs threads ensemble.Vous pouvez tous les lancer et attendre qu'ils se terminent tous, ou si vous souhaitez garder un certain nombre actif, vous continuez à en attendre un seul et à générer le suivant une fois terminé.Ou peut-être savez-vous qu'un fil se terminera beaucoup plus tôt, vous pouvez donc attendre qu'il se termine, faire un peu de travail, puis attendre que le reste se termine.

Les poignées d'attente peuvent sembler un peu excessives si, par exemple, vous ne créez qu'un seul thread supplémentaire et que vous ne souhaitez pas le bloquer jusqu'à ce qu'il soit terminé.Ensuite, vous pouvez utiliser un rappel, afin que la fonction que vous désignez soit appelée dès que le thread est terminé.

Enfin, si et seulement si, pour une raison quelconque, aucune des solutions ci-dessus ne fonctionne, vous pouvez revenir aux sondages.

Je peux penser à 5 façons différentes d'obtenir un nouveau fil de discussion dans .Net, également à peu près dans l'ordre :

  • Système d'exploitation créé, normalement à la suite d'un événement winforms (y compris BackgoundWorker).
  • Obj.Begin___()/End____().Certaines classes CLR ont déjà ces méthodes asynchrones définies pour vous, et vous souhaitez évidemment les utiliser lorsqu'elles sont disponibles.
  • ThreadPool.QueueUserWorkItem().Utilisez-le la plupart du temps pour créer vos propres discussions.
  • Délégué.BeginInvoke()/EndInvoke().Vous pouvez envelopper n'importe quelle méthode de cette façon.
  • Thread.Start().Toi pourrait faites-le de cette façon, mais j'ai lu quelque chose récemment (je n'ai pas le lien maintenant) selon lequel si QueueUserWorkItem ne fonctionne pas, la méthode déléguée est probablement meilleure.

Une bonne ressource Web pour en savoir plus sur le multithreading dans .NET :

L'une des meilleures ressources que je connaisse sur le sujet est le livre "threading in C#":http://www.albahari.com/threading/

J'ai un excellent aperçu de tout ce qu'un développeur .net doit comprendre pour programmer des applications multithread.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top