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