1

我正在使用 CallContext.LogicalGetData 以跨异步代码共享信息。

我想以“线程安全”的方式执行这种调用:

var val = CallContext.LogicalGetData(key);
if(val==null)
{
   CallContext.LogicalSetData(key, initialValue);
}
return val;

关于如何做到这一点的任何想法?

4

1 回答 1

1

使用

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;
    }
}

注意:类或方法不必是静态的。只要确保所有线程在访问临界区时都使用相同的锁。

于 2016-08-29T14:46:43.943 回答