多线程上下文切换 多线程下的调用上下文 : CallContext( 四 )


internal static Object Current {get {return CallContext.HostContext;}[SecurityPermission(SecurityAction.Demand, Unrestricted = true)]set {CallContext.HostContext = value;}}关于HttpContext.Current:ASP.NET会为每个请求分配一个线程 , 这个线程会执行我们的代码来生成响应结果 ,  即使我们的代码散落在不同的地方(类库) , 线程仍然会执行它们 。所以 , 我们可以在任何地方访问HttpContext.Current获取到与当前请求相关的HttpContext对象 , 毕竟这些代码是由同一个线程来执行的嘛 , 所以得到的HttpContext引用也就是那个与请求相关的对象 。因此 , 将HttpContext.Current设计成与当前线程相关联是合适的 。有关CallContext.HostContext的知识可以自行查阅资料 , 这里就不再赘述 。
刚刚提到UnitOfWork模式 , 我们完成了DbContext的线程上下文内的唯一性 , 那么SaveChanges呢?嗯 , 我们可以基于之前的唯一性保证 , 来写一个SaveChanges的唯一入口 。
public class DbSession{public static int SaveChanges(){return DbContextFactory.GetDbContext().SaveChanges();}}4 总结
本文简单介绍了CallContext类的基本概念、方法 , 做了一些测试验证了其提供的方法的适用范围和限制 。
如果我们需要在.NET代码中向下传递对象 , 除了层层递进的传递参数之外 , 适时使用CallContext是一个不错的解耦的方案 。
参考资料
Microsoft Doc , CallContext
.NET源码 , https://referencesource.microsoft.com/#System.Web/HttpContext.cs
雯海 , .NET多线程之CallContext(cnblogs博客)
Koma , EF上下文对象线程内唯一性与优化(csdn博客)


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: