为什么我应该使用BeginWrite而不是Write?

时间:2016-11-16 14:29:33

标签: c# networkstream

我正在开发一项管理多达30.000台远程设备的服务。

做一些负载测试看起来像异步方法BeginWrite使用更多资源然后定期写入(我认为由于创建回调线程所需的开销);另一方面,Write方法总是比BeginWrite返回得快。

所以我的问题是:选择BeginWrite的原因是什么?

另一个问题是:是否有任何理由为同步写设置WriteTimeout?在哪种情况下,Write方法不会产生立即异常(例如,由于封闭的套接字),但在合理的时间内没有完成?

编辑:我有一组工作线程(32或64),因此我一次将数据发送到500-1000个设备,而Write似乎比BeginWrite更好。

编辑2 :经过一点点搜索后,我才知道只有写缓冲区已满,同步写才会挂起。默认的写缓冲区大小是8KB,我只是一次发送1-2KB的数据,所以在我的应用程序中,Write永远不会挂起,它的表现要好于BeginWrite。我设置了1秒的安全WriteTimeout。

1 个答案:

答案 0 :(得分:2)

可扩展性。

同步调用会在线程完成时阻塞它。异步方法不适合。根据您将要处理的并发请求数量,这可能很重要。