Jad*_*ias 11 .net multithreading asynchronous thread-safety cookiecontainer
我问这些问题是因为我在多线程代码中的异步请求中使用CookieContainer.我不能把一个异步请求放在一个锁中.也许我必须像F#一样使用只读"变量"(或不可变类型),对吗?
不,并非所有.NET类都是线程安全的.事实上,很少有人需要.通常,静态成员应该是线程安全的,但这是关于它的.
不可变/半不可变对象是自动线程安全的(这包括诸如XslTransform之类的东西) - 并且有一些可变的情况(例如线程容器),你可以期望事物是线程安全的.MSDN声明每个类的线程安全性.
我不希望cookie容器是线程安全的,所以你可能需要自己同步.
(更新)
重申你的第二点; 究竟你想到哪些变量?在异步请求期间,您自己的本地状态变量不会直接更新,因此在处理响应时准备请求时,您只需同步访问即可.最常见的是,通过Monitor- 即
lock(syncLock) {
// prepare request from (synchronized) state
req.Begin{...}
}
Run Code Online (Sandbox Code Playgroud)
然后在回调中
lock(syncLock) {
// ...read values from request...
// ...update local state...
}
Run Code Online (Sandbox Code Playgroud)
哪里syncLock只是一个锁对象(可能是针对一个实例):
private readonly object syncLock = new object();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2517 次 |
| 最近记录: |