2

dire que je fais une classe statique comme suit avec une méthode d'extension:Cette classe statique va-t-elle se rompre dans un scénario multi-utilisateur?

public static class MyStaticExtensionClass 
{ 
    private static readonly Dictionary<int, SomeClass> AlgoMgmtDict 
     = new Dictionary<int, SomeClass>(); 

    public static OutputClass ToOutput(this InputClass input) 
    { 
     // clears up the dict 
     // does some kind of transform over the input class 
     // return an OutputClass object 
    }  
} 

Dans un système multi-utilisateurs, sera le dictionnaire de gestion de l'État ne fournit pas les valeurs correctes pour l'algorithme de transformation? Une classe régulière sera-t-elle une meilleure conception ou une meilleure conception du dictionnaire à l'intérieur de la méthode?

Répondre

4

Il n'y a que trois scénarios disponibles pour votre dictionnaire: soit il doit être partagée, ou ne doit pas être partagée, ou vous ne sais pas ou de soins.

Si doit être partagé, vous devrez implémenter le verrouillage approprié. Mais puisque la première chose que vous faites dans ToOutput() est d'effacer le dictionnaire, il ne semble pas que le partage vous apportera de nombreux avantages.

Donc, nous en sommes aux deux autres scénarios (ne doivent pas être partagés ou ne savent pas ou les soins), et dans les deux cas, il serait préférable d'isoler le dictionnaire dans une variable locale à l'intérieur ToOutput():

public static OutputClass ToOutput(this InputClass input) 
{ 
    Dictionary<int, SomeClass> algoMgmtDict = new Dictionary<int, SomeClass>(); 
    // Dictionary starts up empty, no need to clear anything. 

    // Do some kind of transform over the `input` object. 
    // Return an OutputClass instance. 
} 
Questions connexes