none
Traitement multiThreading

    Question

  • Bonjour à tous,

    Dans mon application (WCF - C#) j'ai 3 traitements à faire. Je voudrais faire les 3 traitements en même temps, d'ou le multi-Threading, mais l'application (le Thread principal) doit "attendre" que les 3 traitements finissent, pour continuer le reste du traitement.

    Pour information : 1 traitement pour payer, 1 pour reprendre et 1 pour taxer. Les 3 traitements sont bien distincts.

    Je suis preneur de toute idée.

    Merci.

    • Déplacé Ciprian DuduialaOwner vendredi 24 février 2012 07:57 (Origine :Développement .NET (en général))
    jeudi 23 février 2012 18:01

Réponses

  • Bonjour,

    Si vous utilisez le .NET Framework 4.0 cela se fait très simplement comme ceci :

    Parallel.Invoke(() => Traitement1(...), () => Traitement2(...), () => Traitement3());

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    jeudi 23 février 2012 18:32
    Modérateur
  • Bonjour,

    Merci pour votre réponse. J'ai regardé dans ce sens, mais j'ai opté pour :

    Task<Tresult>[] tasks = new Task<Tresult>[3];
    
    tasks[0] = Task<Tresult>.Factory.StartNew(() => Traitement());
    tasks[1] = Task<Tresult>.Factory.StartNew(() => Traitement());
    tasks[2] = Task<Tresult>.Factory.StartNew(() => Traitement());
    
    Task.WaitAll(tasks);
    for (int i = 0; i < 10; i++)
    {
      Tresult resultats = tasks[i].Result;
    }
    
    // Traitement sur le résultat.

    J'espère que ce traitement reste dans l'idée que vous proposez.

    Cordialement.


    vendredi 24 février 2012 12:22

Toutes les réponses

  • Bonjour,

    Si vous utilisez le .NET Framework 4.0 cela se fait très simplement comme ceci :

    Parallel.Invoke(() => Traitement1(...), () => Traitement2(...), () => Traitement3());

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

    jeudi 23 février 2012 18:32
    Modérateur
  • Bonjour,

    Merci pour votre réponse. J'ai regardé dans ce sens, mais j'ai opté pour :

    Task<Tresult>[] tasks = new Task<Tresult>[3];
    
    tasks[0] = Task<Tresult>.Factory.StartNew(() => Traitement());
    tasks[1] = Task<Tresult>.Factory.StartNew(() => Traitement());
    tasks[2] = Task<Tresult>.Factory.StartNew(() => Traitement());
    
    Task.WaitAll(tasks);
    for (int i = 0; i < 10; i++)
    {
      Tresult resultats = tasks[i].Result;
    }
    
    // Traitement sur le résultat.

    J'espère que ce traitement reste dans l'idée que vous proposez.

    Cordialement.


    vendredi 24 février 2012 12:22