我正在开发一项管理多达30.000台远程设备的服务。
做一些负载测试看起来像异步方法BeginWrite使用更多资源然后定期写入(我认为由于创建回调线程所需的开销);另一方面,Write方法总是比BeginWrite返回得快。
所以我的问题是:选择BeginWrite的原因是什么?
另一个问题是:是否有任何理由为同步写设置WriteTimeout?在哪种情况下,Write方法不会产生立即异常(例如,由于封闭的套接字),但在合理的时间内没有完成?
编辑:我有一组工作线程(32或64),因此我一次将数据发送到500-1000个设备,而Write似乎比BeginWrite更好。
编辑2 :经过一点点搜索后,我才知道只有写缓冲区已满,同步写才会挂起。默认的写缓冲区大小是8KB,我只是一次发送1-2KB的数据,所以在我的应用程序中,Write永远不会挂起,它的表现要好于BeginWrite。我设置了1秒的安全WriteTimeout。
答案 0 :(得分:2)
可扩展性。
同步调用会在线程完成时阻塞它。异步方法不适合。根据您将要处理的并发请求数量,这可能很重要。