每天学习一点.net(4) 线程池和执行上下文ExectutionContext

每个线程都关联了一个执行上下文(ExecutionContext)数据结构。执行上下文包括安全设置(压缩栈、Thread的Principal属性和Windows身份)、宿主(System.Threading.HostExecutionContextManager)以及逻辑调用上下文数据(System.Runtime.Messaging.CallContext的LogicalSetData和LogicalGetData方法)

当主线程启动另一个线程时,执行上下文就会由主线程流向辅助线程。可利用ExecutionContext类控制执行上下文的流动。一个典型的

using System;

using System.Threading;

using System.Diagnostics;

public static class program

{

    public static void Main()

    {



        System.Runtime.Remoting.Messaging.CallContext.LogicalSetData("Name", "Jeffery");

       /*此时辅助线程能访问主线程逻辑上下文调用数据*/

        ThreadPool.QueueUserWorkItem(state=>Console.WriteLine("name={0}",System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("Name")));

        /*利用SuppressFlow阻止上下文流动*/





        ExecutionContext.SuppressFlow();



        /*此时辅助线程不能访问主线程逻辑上下文调用数据*/

        ThreadPool.QueueUserWorkItem(state => Console.WriteLine("name={0}", System.Runtime.Remoting.Messaging.CallContext.LogicalGetData("Name")));

       

        /*储存此时的执行上下文*/

        ExecutionContext.RestoreFlow();

        Console.ReadLine();

    }

}



 

 

你可能感兴趣的:(context)