CallContext.LogicalSetData 的线程安全使用
Thread safe usage of CallContext.LogicalSetData
我正在使用 CallContext.LogicalGetData 以便跨异步代码共享信息。
我想以 'thread-safe' 的方式执行这种调用:
var val = CallContext.LogicalGetData(key);
if(val==null)
{
CallContext.LogicalSetData(key, initialValue);
}
return val;
知道怎么做吗?
使用 lock:
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;
}
}
注意:class 或方法不必是静态的。只要确保所有线程在访问临界区时使用相同的锁即可。
我正在使用 CallContext.LogicalGetData 以便跨异步代码共享信息。
我想以 'thread-safe' 的方式执行这种调用:
var val = CallContext.LogicalGetData(key);
if(val==null)
{
CallContext.LogicalSetData(key, initialValue);
}
return val;
知道怎么做吗?
使用 lock:
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;
}
}
注意:class 或方法不必是静态的。只要确保所有线程在访问临界区时使用相同的锁即可。