.NET Core中的异步流下载

Ran*_* Hu 2 asynchronous asp.net-core

我在这里提出了一个问题,需要您的帮助。

我有一个使用PushStream进行异步下载的.net Web API项目,类似

new PushStreamContent(async (outputStream, httpContent, transportContext))=>{}
Run Code Online (Sandbox Code Playgroud)

这样,我可以在操作中下载多个部分。

但是,现在我想将项目移到.net核心中,而在.net核心中找不到用于pushstream的替代项。

您能否让我知道.net核心中是否存在类似pushstream的东西或任何实现它的方法?

非常感谢。

Chr*_*att 5

PushStreamContent通过本质上设置在处理输出流时要调用的回调来工作。这在ASP.NET Web Api中是必需的,因为没有直接访问OutputStream

但是,在ASP.NET Core中,您确实可以通过来直接访问输出流HttpContext.Response.Body。因此,您可以直接写入该流,而无需使用PushStreamContent

FWIW,尽管这可以节省一些服务器资源,但实际上非常糟糕,尤其是对于API之类的东西。由于您是直接写到输出流,因此已经发送了标头,包括响应状态代码。这意味着,如果在编写过程中引发任何异常,则没有机会适当地处理它。响应只是简单地中止,客户端被认为是“成功”的响应,只有一部分是悬而未决的。就我个人而言,我会说完全避免这种做法,并且会浪费资源。除非您要流式传输数据,否则任何好的服务器设置都将有大量的RAM来处理您正在做的事情。即使那样,也可能有更好的方法来处理该数据。

  • @ChrisPratt您能提供一个在.NET Core中使用的示例吗? (3认同)