将数据与线程关联:您如何做到这一点?

时间:2010-11-30 22:55:20

标签: c# .net multithreading

在ASP.NET MVC2中编写一些aysnc控制器时,遇到了我必须调用AsyncManager.Sync的情况。它让我感到疑惑:

当我检索HttpContext.Current时,发生了什么? ASP.NET如何知道我追求的HttpContext?当前上下文如何与此线程关联,以及如何检索它?

1 个答案:

答案 0 :(得分:4)

使用线程范围存储,这称为Thread Local Storage

该机制允许数据与线程关联,即只有分配数据的线程才能看到数据。这对于创建所谓的环境编程模型(如HttpContext.Current和TransactionScope)非常有用。该机制允许在执行线程上随时访问数据,而不必通过例如方法参数“tramp”数据。对于某些上下文\正交问题,这是一个优雅的解决方案。

使用TLS的方法有很多种,包括ThreadStaticAttribute和Thread.SetData \ GetData。