我正在使用 CallContext.LogicalGetData 以跨异步代码共享信息。
我想以“线程安全”的方式执行这种调用:
var val = CallContext.LogicalGetData(key);
if(val==null)
{
CallContext.LogicalSetData(key, initialValue);
}
return val;
关于如何做到这一点的任何想法?
我正在使用 CallContext.LogicalGetData 以跨异步代码共享信息。
我想以“线程安全”的方式执行这种调用:
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;
}
}
注意:类或方法不必是静态的。只要确保所有线程在访问临界区时都使用相同的锁。