gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 19:28:53 28 4
gpt4 key购买 nike

  1. .NET 类 System.Net.CookieContainer 线程安全吗? --更新:交 key 答复--
  2. 是否有任何方法可以确保异步请求期间修改的变量(即 HttpWebRequest.CookieContainer)的线程安全性?
  3. 是否有任何属性可以突出显示线程安全类? --更新:如果 MSDN 上描述了线程安全性,那么它们可能没有相应的属性 --
  4. 所有 .NET 类都是线程安全的吗? --更新:马克回答--

我问这些问题是因为我在多线程代码的异步请求中使用 CookieContainer。而且我无法将异步请求放入锁内。也许我必须像 F# 中那样使用只读“变量”(或不可变类型),对吗?

最佳答案

不,并非所有 .NET 类都是线程安全的。事实上,很少有人有必要这样做。一般来说,静态成员应该是线程安全的,但仅此而已。

不可变/半不可变对象(immutable对象)自动是线程安全的(这包括 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();

关于.net - .NET System.Net.CookieContainer 线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/396222/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com