Mar*_*cus 5 .net c# asp.net multithreading httpcontext
经过一段时间的谷歌搜索后,我还没有找到任何关于HttpContext的线程安全性的权威,确凿的信息.
我正在看一个场景,例如:
public class AsyncHandler : IAsyncHttpHandler
{
void BeginProcessRequest(...)
{
// Spawn some tasks in parallel, provide them with current HttpContext as argument.
}
void EndProcessRequest(...) {...}
}
Run Code Online (Sandbox Code Playgroud)
My(io bound)并行任务可能希望同时访问HttpContext.
看看各个帖子似乎这是安全的,但是,我想要一些实际的证据.当然MSDN给出了通常的"静态线程安全等",但除了我必须假设它不是线程安全之外,这没有任何帮助.
我在StackOverflow上看过各种帖子(比如这里,或者这里,或者这里),但这个问题没有真正的答案.
使用.NET 4.5中的所有异步工作,如果HttpContext不是线程安全的话,这似乎有点奇怪,但是,如果确实不是这样,有没有办法让它成功呢?我能想到:
但这一切都感觉有点糟糕和太多的工作.
编辑:在更详细地研究这个,以及稍后的一些反思后,我相信它实际上并不重要HttpContext不是线程安全的.我在这篇博文中详述了这一点.要点是在ASP.NET中使用正确的SynchronizationContext可确保一次只能有一个线程访问上下文.
HttpContext类不是线程安全的.
例如,该HttpContext.Items属性只是对非同步Hashtable的引用 - 因此这显然不是线程安全的.
从你的问题中不清楚你想要在并行任务之间分享什么,但我建议你使用你自己的线程安全类的实例来共享任务之间的状态,而不是试图包装现有的类.
| 归档时间: |
|
| 查看次数: |
2144 次 |
| 最近记录: |