JsonConvert调用上的线程争用

本文关键字:线程 争用 调用 JsonConvert | 更新日期: 2023-09-27 18:14:48

有没有人在JSON.NET中使用JsonConvert遇到线程争用问题?我有大量的线程调用JsonConvert。并发反序列化时,它们似乎相互阻塞。VS Profiler告诉我,我所有的并发问题都隐藏在Newtonsoft.*中。这是已知的吗?我应该做些什么来使反序列化调用并行运行吗?

我意识到任何一个调用都是只向前的操作,不会线程化自己,但是为什么独立的反序列化会竞争呢?

JsonConvert调用上的线程争用

如果您正在调用如下的非异步方法:

var obj = JsonConvert.DeserializeObject<T>(jsonValue);

阻塞呼叫。考虑如下使用async版本:

 var task = Task.Factory.StartNew(() => JsonConvert.DeserializeObject<T>(jsonString));
 var value = await task;  

事实证明,JsonConvert.DeserializeObjectAsync()并不像Stephen提到的那样是真正的异步(http://james.newtonking.com/json/help/index.html?topic=html/M_Newtonsoft_Json_JsonConvert_DeserializeObjectAsync_1.htm)

希望对你有帮助。

编码快乐!

cleankoder