2010-08-09 2 views
2

J'ai récemment demandé à un développeur d'écrire une bibliothèque en utilisant les nouvelles capacités de multithreading de .NET 4.0.Est-ce que quelqu'un sait de bonnes ressources pour des modèles/tests de programmation parallèles utilisant des tâches .NET 4.0?

Il a fait du bon travail, mais je suis préoccupé par le fait que la logique Tâche est répétée dans tout le code et n'est pas bien encapsulée.

Je suis également préoccupé par le fait que cela crée un problème quand il s'agit de tester. Normalement, je teste en créant un joint dans le code en créant une interface et un objet stub/mock pour exécuter mes tests. Je suppose que c'est possible en utilisant cette façon de faire. Il semble que la logique du code de production soit très différente de la logique de test.

Est-ce que la solution est de faire des tests parallèles et de répéter simplement la logique de la tâche? Ou les gens ont-ils pensé à des modèles où une grande partie de la logique de gestion des tâches peut être encapsulée pour une duplication facile?

Merci!

Task task = Task.Factory.StartNew(() => 
     { 
      if(cancellationToken.IsCancellationRequested) 
      { 
       throw new OperationCanceledException(); 
      } 

      if (_bookHeader.EncryptionType != 0) 
      { 
       throw new MobiException("The book is encrypted"); 
      } 

      ExtractText(); 

      partReady(66.66f); 
     }, cancellationToken); 

     Task opfTask = task.ContinueWith(antecedent => 
      { 
       if (antecedent.Status != TaskStatus.Canceled) 
       { 
        OpfDocument opf = CreateOpf(); 

        partReady(80); 

        MobiDocument book = new MobiDocument() 
        { 
         Contents = _mobiHtml, 
         Description = opf, 
         Header = _bookHeader, 
         Sections = _sections 
        }; 
        Document = book; 


        GC.Collect(); 

        partReady(100); 
       } 
      });    

     return opfTask; 
    } 

Répondre

1
+0

+1 N'essayant pas d'être un as intelligent, mais ce fil est une autre illustration du problème. Je n'ai pas downvoted l'autre poste, mais je ne l'ai pas upvoting non plus (Sérieusement, ne veux pas entrer dans des arguments ici - ont joué ce rôle et reviendront pour lire vos recommandations) –

0

Patterns for Parallel Programming: Understanding and Applying Parallel Patterns with the .NET Framework 4

Ce document fournit une visite détaillée et détaillée de la prise en charge dans la programmation parallèle Microsoft® .NET Framework 4 pour . Cela comprend un examen de parallèles communs modèles et la façon dont ils sont mis en œuvre sans et avec ce nouveau support dans le .NET Framework, ainsi que couvrant les meilleures pratiques pour le développement composantes parallèles utilisant parallèles modèles.

+0

Sûrement c'est une copie plus tardive de @Mitch Wheat's répondre? Toute chance que vous pouvez retirer? –

+1

@Ruben Bartelink: les gens publient parfois en même temps. Je pense qu'il est inutile de pénaliser les gens pour être utiles: SO va cesser d'exister si c'est le vent qui prévaut ... –

+0

* PAS * suggérant de pénaliser, suggérant de ne pas récompenser de tels accidents (je ne suggère pas que Leniel a a) copié le vôtre ou b) n'a pas pressé Ctrl-R ou F5 assez souvent et devrait le faire). N'essayant pas de déranger quelqu'un. Je sais que trier par ovte déplace des trucs qui «ne blessent personne», mais personnellement, je préférerais ne pas être là. Seccond sentiment d'en faire une communauté sans médisance idiote et désolé pour la quantité de temps perdu le vendredi :( –

0

Je serais surpris (mais heureux) s'il est possible d'améliorer les 3 derniers chapitres de CLR via C# 3rd Ed by Richter pour obtenir une grande poignée sur le paysage de choses parallèle dans .NET 4. (Il suffit de lire Effective C#, Second Edition et ne peut pas dire la même chose pour sa couverture de TPL et PL)

Une raison pour laquelle je pense que cela est pertinent est qu'il parle beaucoup de la façon de rendre le code propre et maintenable (et quelques trucs dans PowerThreading qu'il a utilisé un peu) . (Et dans le cas improbable où vous n'êtes pas au courant du livre, c'est le livre CLR à avoir, et le 3ème Ed est une mise à niveau significative du 2ème Ed)

Questions connexes