我使用CallContext.LogicalGetData是为了跨异步代码共享信息。
我想以一种“线程安全”的方式来执行这样的呼叫:
var val = CallContext.LogicalGetData(key);
if(val==null)
{
CallContext.LogicalSetData(key, initialValue);
}
return val;知道怎么做吗?
发布于 2016-08-29 14:46:43
使用锁定
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;
}
}注意:类或方法不必是静态的。只需确保所有线程在访问关键部分时都使用相同的锁。
https://stackoverflow.com/questions/39208984
复制相似问题