当前位置:  开发笔记 > 编程语言 > 正文

CallContext与ThreadStatic

如何解决《CallContext与ThreadStatic》经验,为你挑选了2个好方法。

CallContext和ThreadStatic有什么区别?

我知道在ASP.NET环境中,存储在CallContext中的数据可以在整个请求中持久存在,直到它结束,而ThreadStatic可能会或可能不会工作,因为请求可能会切换线程.我还了解到HttpContext是使用CallContext在内部存储的.

在常规应用程序中,它们似乎都在同一个线程调用中持久存在.什么时候不是这样的?


编辑:在评论中我了解到调用上下文是线程静态存储的抽象.ASP.NET框架显式地将数据从一个线程移动到下一个处理一个请求的线程.其他想要提供线程敏捷性的框架可以对上下文存储执行相同的操作.



1> Jon Skeet..:

通常,请求将始终使用相同的线程,但事实并非总是如此 - ASP.NET展示了线程敏捷性.在Spring.NET论坛上有一个非常有用的讨论.这是指有关此事的深入博客文章.我怀疑进入更多的细节比你会到这里:)

出于兴趣,您看到了哪些相互矛盾的信息?



2> Martin Brown..:

存储为ThreadStatic的项目可用于多个请求.IIS在请求完成后重用该线程来处理后续请求,它甚至可以在处理期间将请求从一个线程交换到另一个线程.每次请求后,ASP.Net都会清除CallContext.


不仅如此 - 一个请求可以跳过线程,因此您在一个阶段中放入ThreadStatic的内容不可用于另一个阶段.
ASP.NET的线程敏捷性处理,基本上.我怀疑它是内部的ThreadStatic,并且当一个线程因任何原因停止处理请求时,ASP.NET将请求和上下文保持在一起,然后在任何线程中重置它来重置它.
推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有