JsonConvert调用的线程争用?

时间:2014-07-26 02:59:21

标签: c# json multithreading json.net

有没有人在JSON.NET中使用JsonConvert遇到线程争用问题?我有大量的线程同时调用JsonConvert.Deserialize,它们似乎互相阻塞。 VS Profiler告诉我所有的并发问题都埋没在Newtonsoft中。*。这是一件众所周知的事吗?我是否应该采取措施使反序列化调用并行运行?

我意识到任何一个调用都是一个前向操作,并且不会自行调整,但为什么独立的反序列化会争用?

1 个答案:

答案 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