Asp.net mvc 当ActionResult来自ASP.NET MVC 4异步操作且启用了瞥视时,使用BufferOutput=false写入HttpResponse会阻塞

Asp.net mvc 当ActionResult来自ASP.NET MVC 4异步操作且启用了瞥视时,使用BufferOutput=false写入HttpResponse会阻塞,asp.net-mvc,asp.net-mvc-4,async-await,glimpse,Asp.net Mvc,Asp.net Mvc 4,Async Await,Glimpse,我有一个定制的ActionResult,它将HttpResponse.BufferOutput设置为false,然后将数据写入响应流。我注意到,当操作结果来自ASP.NET MVC中基于任务的异步操作方法时,会写入响应流块。只有在web.config中启用了“一瞥”插件时,才会发生这种情况。一瞥对我来说非常有用,我真的很想启用它,至少在开发和测试期间。BufferOutput属性应该保持false,因为内容长度可能相当大,我不想将其缓冲在内存中 这是能够重现这种精确行为的最短代码: public

我有一个定制的ActionResult,它将HttpResponse.BufferOutput设置为false,然后将数据写入响应流。我注意到,当操作结果来自ASP.NET MVC中基于任务的异步操作方法时,会写入响应流块。只有在web.config中启用了“一瞥”插件时,才会发生这种情况。一瞥对我来说非常有用,我真的很想启用它,至少在开发和测试期间。BufferOutput属性应该保持false,因为内容长度可能相当大,我不想将其缓冲在内存中

这是能够重现这种精确行为的最短代码:

public sealed class CustomResult : ActionResult
{
    public override void ExecuteResult(ControllerContext context)
    {
        var resp = context.HttpContext.Response;
        resp.BufferOutput = false;
        resp.ContentType = "text/plain";
        resp.Output.Write(DateTime.UtcNow.ToString());
        resp.Flush();
    }
}

public sealed class DownloadController : Controller
{
    // the client nevers gets the response from this action
    public async Task<ActionResult> Async()
    {
        await Task.Yield();
        return new CustomResult();
    }

    // this works
    public ActionResult Sync()
    {
        return new CustomResult();
    }
}
公共密封类CustomResult:ActionResult
{
公共覆盖无效ExecuteSult(ControllerContext上下文)
{
var resp=context.HttpContext.Response;
resp.BufferOutput=false;
resp.ContentType=“text/plain”;
resp.Output.Write(DateTime.UtcNow.ToString());
分别冲洗();
}
}
公共密封类下载控制器:控制器
{
//客户端从未从该操作中获得响应
公共异步任务async()
{
等待任务;
返回新的CustomResult();
}
//这很有效
公共操作结果同步()
{
返回新的CustomResult();
}
}
我用最新的skillip.Mvc4包(版本1.3.2)对此进行了测试


我是否做错了什么,是否有解决此问题的方法,或者这是一个一瞥错误,我应该报告它?

这看起来像一个错误。你介意在网上报道吗?@cgijbels当然可以-