11
votes

Comment frayer le fil en c #

Quelqu'un pourrait-il s'il vous plaît donner un échantillon ou un lien qui décrit comment frayer le fil où chacun fera des travaux différents en même temps.

Supposons que j'ai Job1 et Job2. Je veux exécuter à la fois les emplois simultanément. J'ai besoin de ces travaux pour être exécutés en parallèle. Comment puis-je faire ça?


0 commentaires

3 Réponses :


1
votes

1 commentaires

Votre lien est (maintenant) cassé (le téléchargement a été "retiré") mais j'ai été capable de trouver link



21
votes

Bien, fondamentalement, c'est aussi simple que: xxx

Cependant, il existe d'autres options telles que la piscine de thread ou (en .NET 4) en utilisant des extensions parallèles.

J'ai un Tutoriel de filetage , qui est plutôt vieux, et Joe Alabahari a un aussi .


9 commentaires

Supposons que j'ai Job1 et Job2. Je veux exécuter à la fois les emplois simultanément. Votre exemple le fera de manière séquentielle. Mais j'ai besoin de ces travaux pour être exécutés parallèles. Comment puis je faire ça ?


@deepak: Non, cela ne va pas - vous démarrez deux threads et ils vont courir en parallèle. C'est tout le point d'utiliser des threads.


@Jonskeet Et si je souhaite passer des paramètres à la méthode que je veux appeler?


@ABIJEETPATRO: Ensuite, vous utilisez soit paramétréastTheadstart ou utilisez une fonction anonyme pour capturer les paramètres. Si ce n'est pas assez de détails, veuillez poser une question distincte (après la recherche de réponse - je soupçonne que la question a été posée avant).


@Jonskeet Oui, merci, merci. Pour voir comment appeler une méthode contenant des paramètres via un thread, cochez ici - Stackoverflow.com/a/3360582/903324


Visual Basic et C # Les utilisateurs peuvent omettre le threadstart ou paramétriceThreadstart Délégué constructeur lors de la création d'un fil. En C #, spécifiez simplement le nom de la procédure de thread. Le compilateur sélectionne le constructeur de délégué correct. thread thread = nouveau thread (nomofmethodtocall); Assurez-vous également que votre méthode est statique: Statique privé naïvement naïvéfmethodtocall () {// code};


@ SPENCER741: Il n'est pas nécessaire que les conversions de groupe de méthodes statiques fonctionneront avec des méthodes d'instance tant que le contexte de la conversion est également une méthode d'instance.


@ Jonskeet isolant le code dans mon commentaire, la méthode devra être statique, correcte?


@ SPENCER741: Non. Si thread thread = nouveau thread (nomofmethodtocall); est exécuté dans une méthode d'instance, c'est bien pour Nomofmethodtocall pour être une méthode d'instance. Voir DotNetFiddle.net/bvsoki



0
votes

Les threads en C # sont modélisés par classe de thread. Lorsqu'un processus démarre (vous exécutez un programme), vous obtenez un seul thread (également appelé fil principal) pour exécuter votre code d'application. Pour démarrer explicitement un autre fil (autre que votre fil principal de l'application), vous devez créer une instance de classe de thread et appeler sa méthode de démarrage pour exécuter le fil à l'aide de C #, voyons un exemple

  using System;
  using System.Diagnostics;
  using System.Threading;

  public class Example
  {
     public static void Main()
     {
           //initialize a thread class object 
           //And pass your custom method name to the constructor parameter

           Thread thread = new Thread(SomeMethod);

           //start running your thread

           thread.Start();

           Console.WriteLine("Press Enter to terminate!");
           Console.ReadLine();
     }

     private static void SomeMethod()
     {
           //your code here that you want to run parallel
           //most of the cases it will be a CPU bound operation

           Console.WriteLine("Hello World!");
     }
  }


0 commentaires