C #Одноэлементный резьбобезопасный

У меня есть одноэлементный класс, похожий на этот

public class Singleton
{
    private static Singleton m_instance;
    private Timer m_timer;
    private static List<CustomObject> m_cacheObjects;

    private Singleton()
    {    
        m_cacheObjects = new List<CustomObject>();
        m_timer= new Timer(MyTimerCallBack, 
                           null, 
                           TimeSpan.FromSeconds(60), 
                           TimeSpan.FromSeconds(60));           
    }

    public static Singleton Instance
    {
        get
        {
            if (m_instance == null)
            {
                m_instance = new Singleton();
            }
            return m_instance;
        }
    }

    private void MyTimerCallBack(object state)
    {
        //******** Update the list by interval here ******************

        m_cacheObjects = UpdateTheList();
    }

    public void CallMe()
    {
        foreach (CustomObject obj in m_cacheObjects)
        {
            // do something here based on obj

            // The question is, does the m_cacheObjects is thread safe??
            // what happen if the m_cacheObjects is changed
            // during the loop interation?
        }
    }
}

Метод CallMe будет вызываться веб-сервисом:

  [WebMethod]
    public void CallMeWebService()
    {
        Singleton.Instance.CallMe();
    }

Вопросы :1 )Является ли m _cacheObjects потокобезопасным? что произойдет, если m _cacheObjects изменится (из-за таймера )во время циклического взаимодействия (в CallMe())?

2 )Будет ли создан новый поток при вызове веб-службы CallMeWebService ()?

10
задан Kjartan 26 July 2012 в 08:44
поделиться