Joe*_*nez 12 c# static multithreading
所以我想知道asp.net是如何确定范围静态属性的,当(据我所知)asp.net是多线程的.
无论哪种方式,这是一种看似非常有用的技术......我想利用它,但绝对不想调试共享状态错误: - /
Mar*_*ell 15
这不是AppDomain按要求.如果要使用特定于线程的状态,请尝试:
[ThreadStatic]
private static int foo;
public static int Foo {get {return foo;} set {foo = value;}}
Run Code Online (Sandbox Code Playgroud)
每个线程现在都有自己的值Foo(或者更确切地说:'foo').
这不是轻易使用的 - 它确实有成本,但是在每个线程的基础上共享状态的有效方式.我曾经使用过一次,也许两次 - 而且我写了很多C#.不要过度使用它......
特别要注意初始化问题(即忘记这样做),并记住要自己清理等等.如果你使用任何异步代码,要非常小心,因为任何回调/工人/等都会有不同的状态.
Marc所说的是最容易被你追求的东西,但是ASP.NET实际上比ThreadStatic更复杂,因为单个请求实际上可以由多个线程处理..我相信ASP.NET所发生的事情是表示执行线程明确地被告知要切换上下文,当然托管环境正在调度线程,它有httpcontext需要执行的上下文,所以它找到一个线程,告诉线程它应该运行哪个上下文..然后发送它在途中.
所以解决方案真的不是那么令人遗憾,因为线程静止更简单,并且可能适合95%的时间需要.
| 归档时间: |
|
| 查看次数: |
3592 次 |
| 最近记录: |