有没有人在JSON.NET中使用JsonConvert遇到线程争用问题?我有大量的线程同时调用JsonConvert.Deserialize,它们似乎互相阻塞。 VS Profiler告诉我所有的并发问题都埋没在Newtonsoft中。*。这是一件众所周知的事吗?我是否应该采取措施使反序列化调用并行运行?
我意识到任何一个调用都是一个前向操作,并且不会自行调整,但为什么独立的反序列化会争用?
答案 0 :(得分:1)
如果您正在调用如下的非异步方法:
var obj = JsonConvert.DeserializeObject<T>(jsonValue);
这是一个阻止电话。请考虑使用异步版本,如下所示:
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