每天学习一点.net(4) 线程池和执行上下文ExectutionContext
2013-06-15 00:08 黑眼圈Mars 阅读(411) 评论(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();
}
}
浙公网安备 33010602011771号