何时使用 JsonSerializer 的异步版本(SerializeAsync/DeserializeAsync)?

Ddd*_*Ddd 2 .net c# serialization asynchronous json.net

序列化器JsonSerializer有异步版本的方法。

我想澄清一下在什么情况下使用它们?

我通常默认使用简单版本的序列化/反序列化,从不关心异步版本。但在某些情况下可能最好使用异步版本。

Mar*_*ell 5

这里的相关问题是:

  1. 我是否已经有正在处理的数据,或者数据是异步传入的(例如通过套接字)?
  2. 关心阻塞 IO 操作的开销吗?

如果数据已经在 a stringbyte[]MemoryStream或类似的内容中:那么只需使用同步反序列化(等);它会更快(异步机制本身有开销)。如果数据从外部源流入(或流出):考虑异步。

第二个问题可以大致近似为“我在服务器上运行吗?”;客户端和控制台应用程序:通常不会受到空闲线程的严重影响(如果我们忽略 UI 阻塞,这可以通过其他方式避免),而在服务器应用程序上:空闲线程(在挂起的 IO 上被阻塞)可能会严重受到影响限制吞吐量。服务器本质上以更高的并发性运行,而线程是有限且昂贵的资源。