流式文本输出用于长时间运行的操作?

Por*_*man 16 asp.net-mvc asp.net-mvc-3

我有一些实用程序操作,通过返回文本输出return Content("my text","text/plain").

有时这些方法需要几分钟才能运行(即日志解析,数据库维护).

我想修改我的操作方法,以便不是一次性返回所有输出,而是在文本准备就绪时将文本流式传输到客户端.

这是一个人为的例子:

public ActionResult SlowText()
{
    var sb = new System.Text.StringBuilder();
    sb.AppendLine("This happens quickly...");
    sb.AppendLine("Starting a slow 10 second process...");
    System.Threading.Thread.Sleep(10000);
    sb.AppendLine("All done with 10 second process!");
    return Content(sb.ToString(), "text/plain");
}
Run Code Online (Sandbox Code Playgroud)

如上所述,此操作将在10秒后返回三行文本.我想要的是一种方法来保持响应流打开,并立即返回前两行,然后在10秒后返回第三行.

我记得10年前在Classic ASP 3.0中使用Response对象做了这个.是否有官方的,MVC友好的方式来实现这一目标?

-

更新:在应用程序中使用Razor .cshtml; 但是没有使用任何视图(仅ContentResult)用于这些操作.

mar*_*ind 5

直接写入Response对象应该有效,但仅限于一些简单的情况.许多MVC功能依赖于输出编写器替换(例如,部分视图,Razor视图引擎等),如果直接写入响应,则结果将无序.

但是,如果您不使用视图而是直接在控制器中写入,那么您应该没问题(假设您的操作未被调用为子操作).