.net - JavascriptSerializer 或 JavascriptDeserializer 线程的不同实例上的不同线程是否安全

标签 .net json multithreading serialization thread-safety

我在这里寻找一个明确的答案。

根据the documentation JavascriptSerializer 的公共(public)静态方法是线程安全的,但非静态方法不是。

是否保证对于此类的公共(public)非静态方法,运行不同线程的不同实例是线程安全的(即没有可能违反线程安全的私有(private)静态资源)?特别是我感兴趣的JavascriptSerializer和JavascriptDeserializer中的序列化和反序列化方法,但想大致了解答案。

也就是说,如果线程 A 只在实例 A 上运行,而线程 B 只在实例 B 上运行,那么在这种情况下,公共(public)非静态方法的线程安全是否有明确的保证?

最佳答案

概括一下这个问题:JavaScriptSerializer 的离散实例是否可以?用于不同线程,最多有一个线程与特定实例交互?

I am looking for a definitive answer here.



我不能给你那个。但是,(您可能知道)文档中的线程安全消息非常通用,并且几乎无处不在(异常(exception)是管理并发的类型)。

轶事:我不知道存储共享内部状态的任何类型不是线程安全的。这无异于询问您是否可以使用 List 的两个不同实例或 XmlDocument在两个不同的线程上;如果您不能,该框架将毫无用处。
JavaScriptSerializer意味着像 Web 服务器那样在多个线程上多次实例化(ASP.Net 线程非常复杂,但肯定会在不同的线程上创建和调用多个类型的实例)。 MVC 框架使用 JavaScriptSerializer在内部,因此很明显该团队打算在多线程 Web 环境中使用它。

反编译源的快速查看显示没有共享的内部状态。正如@usr 所指出的,不能保证内部实现的一致性。但是,由于上述原因,这种情况似乎不太可能发生变化。

综上所述,JSON.net library由于其性能和灵 active ,通常被认为是 JSON(反)序列化的优越替代方案。

关于.net - JavascriptSerializer 或 JavascriptDeserializer 线程的不同实例上的不同线程是否安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19454142/

相关文章:

.net - 混合 32 位和 64 位托管程序集

c# - .NET JAXB 等效项?

json - 如何从复杂的 JSON 对象中获取值?

c++ - 如何在成员函数线程中调用回调?

c# - 调用 ASP.NET 用户控件事件时调用页面事件

.net - 使用 LINQ 从列表创建元组列表

Javascript:基于 d3 的 recurse() 的递归深度优先搜索分层重新排序

jquery - 通过 URL 重写重定向到 SharePoint 2010 访问 listdata.svc

multithreading - 从线程内部实例化一个降序线程是否安全?

java - 为什么我需要同步 Collections.synchronizedList 返回的列表