每天学习一点.net(4) 线程池和执行上下文ExectutionContext
2013-06-15 00:08 黑眼圈Mars 阅读(404) 评论(0) 编辑 收藏 举报每个线程都关联了一个执行上下文(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(); } }