У меня есть одноэлементный класс, похожий на этот
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 ()?