有没有人在JSON.NET中使用JsonConvert遇到线程争用问题?我有大量的线程同时调用JsonConvert.Deserialize,它们似乎互相阻塞。 VS Profiler向我展示了我所有的并发问题都埋在Newtonsoft。*中。这是已知的东西吗?我应该做些什么来使反序列化调用并行运行吗?
我知道任何一个调用都是前向操作,并且不会自己执行线程,但是为什么要进行独立的反序列化呢?
最佳答案
如果您正在调用如下所示的非异步方法:
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