不,并非所有.NET类都是线程安全的.事实上,很少有人需要.通常,静态成员应该是线程安全的,但这是关于它的.
不可变/半不可变对象是自动线程安全的(这包括诸如XslTransform之类的东西) - 并且有一些可变的情况(例如线程容器),你可以期望事物是线程安全的.MSDN声明每个类的线程安全性.
我不希望cookie容器是线程安全的,所以你可能需要自己同步.
(更新)
重申你的第二点; 究竟你想到哪些变量?在异步请求期间,您自己的本地状态变量不会直接更新,因此在处理响应时准备请求时,您只需同步访问即可.最常见的是,通过Monitor
- 即
lock(syncLock) { // prepare request from (synchronized) state req.Begin{...} }
然后在回调中
lock(syncLock) { // ...read values from request... // ...update local state... }
哪里syncLock
只是一个锁对象(可能是针对一个实例):
private readonly object syncLock = new object();
Turnkey.. 5
从马口:
线程安全
此类型的任何公共静态(在Visual Basic中为Shared)成员都是线程安全的.任何实例成员都不保证是线程安全的.
编辑:
您可以锁定修改实例成员的操作.
不,并非所有.NET类都是线程安全的.事实上,很少有人需要.通常,静态成员应该是线程安全的,但这是关于它的.
不可变/半不可变对象是自动线程安全的(这包括诸如XslTransform之类的东西) - 并且有一些可变的情况(例如线程容器),你可以期望事物是线程安全的.MSDN声明每个类的线程安全性.
我不希望cookie容器是线程安全的,所以你可能需要自己同步.
(更新)
重申你的第二点; 究竟你想到哪些变量?在异步请求期间,您自己的本地状态变量不会直接更新,因此在处理响应时准备请求时,您只需同步访问即可.最常见的是,通过Monitor
- 即
lock(syncLock) { // prepare request from (synchronized) state req.Begin{...} }
然后在回调中
lock(syncLock) { // ...read values from request... // ...update local state... }
哪里syncLock
只是一个锁对象(可能是针对一个实例):
private readonly object syncLock = new object();
从马口:
线程安全
此类型的任何公共静态(在Visual Basic中为Shared)成员都是线程安全的.任何实例成员都不保证是线程安全的.
编辑:
您可以锁定修改实例成员的操作.