我有一个自定义 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 错误,我应该报告它?