线程安全使用CallContext.LogicalSetData

时间:2016-08-29 14:43:00

标签: c# multithreading executioncontext

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

我想在“线程安全”中执行此类调用。时尚:

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

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

1 个答案:

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

注意:类或方法不必是静态的。只需确保在访问关键部分时所有线程都使用相同的锁。