ASP Core中使用HttpRequest.BodyReader/BodyWriter后需调用CompleteAsync()吗?
关于
HttpRequest.BodyReader/HttpResponse.BodyWriter调用CompleteAsync()的说明 针对HttpResponse.BodyWriter
- 必须调用
CompleteAsync()。框架需要这个方法标记响应体写入完成,要是不调用,请求大概率会挂起,客户端要么收不到完整响应,要么直接超时,而且连接会一直处于打开状态,容易造成资源泄漏。哪怕你已经写完了所有响应数据,框架也不会自动帮你收尾,必须显式调用这个方法告诉它“写入完成”。
针对HttpRequest.BodyReader
- 正常读完所有请求体数据的话,不用特意调用
CompleteAsync(),框架会自动处理后续的资源清理工作。 - 但如果是提前终止读取(比如只需要部分数据就满足业务需求),调用
CompleteAsync()能让框架及时知道不需要再读取剩余数据,这样可以尽早释放相关资源,避免不必要的内存占用或连接消耗。
实际效果总结
- 对
HttpResponse.BodyWriter来说,CompleteAsync()是硬性要求,直接关系到请求能否正常结束、资源是否能及时回收; - 对
HttpRequest.BodyReader来说,正常读取场景下不调用没影响,但提前终止时调用能优化资源利用效率。
内容的提问来源于stack exchange,提问作者OwnageIsMagic
相关产品推荐
相关产品推荐

