当前位置:  开发笔记 > 编程语言 > 正文

.NET System.Net.CookieContainer线程安全吗?

如何解决《.NETSystem.Net.CookieContainer线程安全吗?》经验,为你挑选了2个好方法。

不,并非所有.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)成员都是线程安全的.任何实例成员都不保证是线程安全的.

编辑:

您可以锁定修改实例成员的操作.



1> Marc Gravell..:

不,并非所有.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();



2> Turnkey..:

从马口:

线程安全

此类型的任何公共静态(在Visual Basic中为Shared)成员都是线程安全的.任何实例成员都不保证是线程安全的.

编辑:

您可以锁定修改实例成员的操作.

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有