[英]Parent object goes out of scope when I have captured child property - when does it dispose the child property?
我不太确定该如何措辞,但要详细说明一下,我在ASP.Net Web API 2项目中使用了AWS开发工具包,我想返回S3对象的响应流-该流已传递到客户,然后处置。
我不确定的是,我对S3的引用被抽象到IFileStore
对象中,以便将自己作为依赖项与AWS分离。 在我的文件存储中,我检索了一个包含ResponseStream
属性的S3Response
对象。 如果处置了S3Response
对象,它将处置基础的ResponseStream
。 不过, IFileStore
仅返回一个Stream
,然后将其打包并从我的API中以StreamContent
返回。
假设我调用FileStore.GetFile(...)
并且它返回ResponseStream
属性的值,然后ResponseStream
超出范围,我怀疑在正常GC期间,其父对象可能会在其ResponseStream
对象上调用Dispose
HTTP响应完成之前的行为。
如何使S3抽象化,并确保仅在HTTP响应完成后才丢弃响应流?
我可以做到的一种方法是将整个S3响应对象打包到一个通用容器对象中,该对象将Stream
实现为基础流的代理,这样我就可以从我的API方法返回StreamContent
,然后让Dispose
方法进行处理当框架在流程结束时自然调用Dispose时,将覆盖整个基础S3响应对象。 虽然不确定是否有更好的方法。
使用PushStreamContent
从ASP.NET Web API将数据流传输到客户端可能是一个好主意。 PushStreamContent
支持异步数据生成lambda( Func<Task>
),并且客户端可以立即开始接收内容流。
这是有关该主题的精彩博客文章,其中包含一些示例代码: “ ASP.NET WebApi中的异步流” 。
我不能代表AWS开发工具包,但是理想情况下,您也许可以异步地将数据从AWS API返回的流中直接泵送到要发送到Web API客户端的流中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.