1
비동기 코드에서 정보를 공유하기 위해 CallContext.LogicalGetData를 사용하고 있습니다.CallContext.LogicalSetData 스레드를 안전하게 사용합니다.
나는 '스레드 안전'방식으로 호출의 종류를 수행 할 :
var val = CallContext.LogicalGetData(key);
if(val==null)
{
CallContext.LogicalSetData(key, initialValue);
}
return val;
그 작업을 수행하는 방법에 대한 어떤 생각을?
private static readonly object _lock = new object();
public static object GetData(string key, object initialValue)
{
lock(_lock)
{
object val = CallContext.LogicalGetData(key);
if (val == null)
CallContext.LogicalSetData(key, initialValue);
return val;
}
}
참고 :
네가 맞아 문맥마다 자물쇠가 필요 없어 하나의 자물쇠 만 있으면 충분해 =) 고마워! – David
성능상의 이유로 Null 검사 후에 잠금을 설정하는 것이 더 좋을 것이라고 생각합니다. – David
@ David 나는 그렇게하지 않을 것이다. 변수 읽기는 스레드로부터도 안전해야합니다. –