1 /// <summary>
2 /// 阻止执行上下文流动来影响线程逻辑调用上下文数据
3 /// </summary>
4 public static void FlowDataContext()
5 {
6 //将数据放到FlowDataContext线程的逻辑调用上下文
7 CallContext.LogicalSetData("key", "FlowData");
8
9 //初始化要由一个线程池线程做的工作
10 //线程池线程能访问逻辑调用上下文数据
11 ThreadPool.QueueUserWorkItem(state => Console.WriteLine("1.key:{0}", CallContext.LogicalGetData("key")));
12
13 //阻止FlowDataContext线程的执行上下文流动
14 ExecutionContext.SuppressFlow();
15
16 //初始化要由一个线程池线程做的工作
17 //线程池线程不能访问逻辑调用上下文数据
18 ThreadPool.QueueUserWorkItem(state => Console.WriteLine("2.key:{0}", CallContext.LogicalGetData("key")));
19
20 //恢复FlowDataContext线程的执行上下文流动
21 ExecutionContext.RestoreFlow();
22
23 ThreadPool.QueueUserWorkItem(state => Console.WriteLine("3.key:{0}", CallContext.LogicalGetData("key")));
24 }