asynchronous - .net core 中的异步流下载

标签 asynchronous asp.net-core

我在这里遇到一个问题,需要你的帮助。

我有一个 .net web api 项目,使用 PushStream 进行异步下载,类似于

new PushStreamContent(async (outputStream, httpContent, transportContext))=>{}

这样,我就可以在action中进行多个部分的下载。

但是,现在我想将项目移至 .net core,但在 .net core 中找不到 Pushstream 的替代品。

请问.net core中有没有类似pushstream的东西或者有什么方法可以实现它?

非常感谢。

最佳答案

PushStreamContent 的工作原理本质上是设置一个在处理输出流时调用的回调。这在 ASP.NET Web Api 中是必要的,因为无法直接访问 OutputStream

但是,在 ASP.NET Core 中,您可以通过 HttpContext.Response.Body 直接访问输出流。因此,您可以直接写入该流,而不需要像 PushStreamContent 这样的东西。

FWIW,虽然这可以节省一些服务器资源,但实际上非常糟糕,尤其是对于 API 之类的东西。由于您直接写入输出流,因此 header 已发送,包括响应状态代码。这意味着如果在您编写时出现任何异常,则没有机会进行适当的处​​理。响应被简单地中止,并且客户端被悬而未决,并留下了所谓的“成功”响应,并且只有部分主体。就我个人而言,我会说完全避免这种做法并承受资源损失。除非您要传输大量数据,否则任何良好的服务器设置都将拥有充足的 RAM 来处理您正在做的事情。即便如此,可能还有更好的方法来处理数据的交付。

关于asynchronous - .net core 中的异步流下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48107679/

相关文章:

c# - 当方法返回 void 时,是否与任务相同?

javascript - React组件类,不能写async方法?

java - 如何并行调用两个返回 DeferredResult<> 的方法?

asp.net-core - vNext 服务器变量丢失

asp.net-core - 在 .net Core 中像表单例份验证一样加密密码

c# - 最佳实践 winforms async/await 关键字

node.js - 请求率大

c# - ASP.NET CORE 将 ID 传递给 Controller ​​以显示页面

asp.net-core - 无法解密防伪 token

asp.net - IFormFile 上传图像 ASP.NET core MVC 始终显示空值