1

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

这是可以重现此确切行为的最短代码:

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();
    }
}

我使用最新的 Glimpse.Mvc4 包(版本 1.3.2)对此进行了测试。

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

4

0 回答 0