나는 XML 문서를 deserialize하고 그것으로부터 객체를 만드는 함수를 가지고있다.C# : lock 문 내부의 콜백 함수도 잠겨 있습니까?
개체를 캐시에 저장하여 데이터를 가져올 때마다 xml을 deserialize 할 필요가 없습니다.
public class XMLDeserializer
{
public event OnElementDeserialized OnElementDeserializedCallback;
public void DeserializeXml(string xmlPath)
{
// implementation
}
}
public class XMLDeserializerFacade
{
private static object _lockObject = new object();
private XMLDeserializer xmlDeserializer;
private ICacheProvider cacheProvider;
public XMLDeserializerFacade(XMLDeserializer xmlDeserializer, ICacheProvider cacheProvider)
{
this.xmlDeserializer = xmlDeserializer;
this.cacheProvider = cacheProvider;
xmlDeserializer.OnElementDeserializedCallback += delegate(object element)
{
cacheProvider.Add("uniqueKey", element);
// is here in lock as well or i have to lock it again?
};
}
public void DeserializeXml(string xmlPath)
{
lock(_lockObject)
{
xmlDeserializer.DeserializeXml(xmlPath);
// From here it will go to
// cacheProvider.Add("uniqueKey", element); callback
}
}
}
내가 XML을 역 직렬화 할 때, 나는
XMLDeserializerFacade.DeserializeXml("file.xml")
내 질문에 전화를 내가뿐만 아니라 OnElementDeserializedCallback
콜백 내부도 lock
를 사용한다는 것입니다?
고맙습니다.
잠금을 두 번 잠글 것입니다. – Catalin
완전히 교착 상태가 있습니다. :) – flindeberg