繁体   English   中英

当我捕获了子属性时,父对象超出了范围-它何时处理子属性?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM