Methode static

Methode static - C#/.NET managed - Programmation

Marsh Posté le 05-05-2009 à 11:12:40    

Bonjour
je vais prendre un exemple ca sera plus explicite
 

Code :
  1. /// <summary>
  2.         /// Retourne la liste complete des supplier
  3.         /// </summary>
  4.         /// <returns>retourne null si vide</returns>
  5.         public static List<Project.Common.Supplier> GetAll()
  6.         {
  7.             if (Context.Current.ProjectDataContext != null)
  8.             {
  9.                 var s_suppliers = from supplier in Context.Current.ProjectDataContext.Suppliers
  10.                                                  select supplier;
  11.                 if (s_suppliers != null)
  12.                 {
  13.                     List<Project.Common.Supplier> listSupplier = new List<Project.Common.Supplier>();
  14.                     foreach (Project.DAL.Supplier s in s_suppliers)
  15.                     {
  16.                         listSupplier.Add(new Project.Common.Supplier(s.Company.CompanyName, s.SupplierId));
  17.                     }
  18.                     return listSupplier;
  19.                 }
  20.                 else
  21.                     return null;
  22.             }
  23.             else throw new DatabaseOfflineException();
  24.         }


 
La question que je me pose c'est si deux personne en meme temps lance la méthode, est ce que ca poserai pas probleme etant donner que les variables sont les meme pour tous du coup ?
Comment resoudre le probleme ? Lock ? ou degager le static ?
( j'utilise a peu pres la meme technique pour les update and insert )

Reply

Marsh Posté le 05-05-2009 à 11:12:40   

Reply

Marsh Posté le 05-05-2009 à 14:19:58    

Comment plusieurs personnes pourraient exécuter ce bout de code en même temps ?
C'est pas du compilé ?
Plusieurs utilisateurs lancent le même exécutable ? Même là ce ne serait pas possible, les instance du programme seraient tourneraient dans des contextes d'exécution différents.


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
Reply

Marsh Posté le 05-05-2009 à 16:17:23    

kao98 a écrit :

Comment plusieurs personnes pourraient exécuter ce bout de code en même temps ?
C'est pas du compilé ?
Plusieurs utilisateurs lancent le même exécutable ? Même là ce ne serait pas possible, les instance du programme seraient tourneraient dans des contextes d'exécution différents.


 
Ou plus simplement plusieurs thread dans une même application? Si c'est le cas et pour répondre à la question d'origine alors oui, les solutions sont la gestion manuelle de la concurrence d'accés avec un lock (me semble qu'il y a un attribut .net a appliquer à la méthode pour pas gérer ça manuellement, me souviens plus trés bien), ou plus simple rendre la méthode non statique mais alors il faut aussi qu'elle cesse de travailler sur des variables statiques (ou globales) et seulement sur des variables membres non statiques. Le choix de l'une au l'autre solution dépend surtout de l'importance que ton appli accorde ou non au fait que tous les threads travaillent avec les mêmes données.

Reply

Marsh Posté le 05-05-2009 à 18:44:45    

J'y avais pensé, mais si c'était le cas, il l'aurait mentionné.
 
Plusieurs utilisateurs != plusieurs thread.


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
Reply

Marsh Posté le 11-05-2009 à 16:59:07    

kao98 a écrit :

J'y avais pensé, mais si c'était le cas, il l'aurait mentionné.
Plusieurs utilisateurs != plusieurs thread.


 
Un site web asp.net? Et ma réponse ne vaut effectivement que pour plusieurs threads lancés depuis un même exécutable. Il parle qd même de variables qui "seraient les mêmes pour tous", ce qui n'a pas de sens si ya d'autant d'exe que d'utilisateurs :). Enfin faudrait qu'il nous éclaire.


Message édité par tamino le 11-05-2009 à 16:59:33
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed