Comment faire de la méthode statique "thread-safe"?

J'ai écrit une classe statique qui est un référentiel de certaines fonctions que je fais appel à partir d'une autre classe.

public static class CommonStructures
{
    public struct SendMailParameters
    {
        public string To { get; set; }
        public string From { get; set; }
        public string Subject { get; set; }
        public string Body { get; set; }
        public string Attachment { get; set; }
    }
}

public static class CommonFunctions
{
    private static readonly object LockObj = new object();
    public static bool SendMail(SendMailParameters sendMailParam)
    {
        lock (LockObj)
        {
            try
            {
                //send mail
                return true;
            }
            catch (Exception ex)
            {
                //some exception handling
                return false;
            }
        }
    }

    private static readonly object LockObjCommonFunction2 = new object();
    public static int CommonFunction2(int i)
    {
        lock (LockObjCommonFunction2)
        {
            int returnValue = 0;
            try
            {
                //send operation
                return returnValue;
            }
            catch (Exception ex)
            {
                //some exception handling
                return returnValue;
            }
        }
    }
}

Question 1: Pour mon deuxième méthode CommonFunction2, dois-je utiliser une nouvelle statique de verrouillage c'est à dire LockObjCommonFunction2 dans cet exemple, ou puis-je réutiliser le même verrou de l'objet LockObj défini au début de la fonction.

Question 2: Est-il rien qui pourrait conduire à filetage questions connexes ou puis-je améliorer le code pour être sûr fil.

Point 3: Peut-il y avoir des problèmes en passant ordinaires de classe au lieu de struct.. dans cet exemple SendMailParameters( dont je fais usage de l'habillage de tous les paramètres, au lieu d'avoir plusieurs paramètres à la fonction SendMail)?

Ce qui concerne,
MH

vous avez laissé de côté certains détails importants tels que l'état les deux fonctions dépendent. Ne soit de leur changement d'état ou de dépendre de l'état interne de la classe?
Faire de toutes les méthodes de "thread-safe" ne garantit pas l'ensemble de l'application va être thread-safe ericlippert.com/2013/01/31/the-no-lock-deadlock
merci pour le partage de cet article. Eric est très bonne.

OriginalL'auteur user1961100 | 2013-06-07