【发布时间】:2013-08-27 01:38:46
【问题描述】:
我正在将文件流式传输到客户端以供下载。但是文件大小可能非常大(最多几 GB),因此我不想阻止用户单击网页上的其他按钮,这些按钮与下载相同的控制器。从网上阅读,我发现我可以使用“Async”和“Completed”后缀使其异步,这是我的代码:
public void DownloadAsync(string filename, string Id, string docId)
{
AsyncManager.OutstandingOperations.Increment();
// code to get the file from server and send it to client.
AsyncManager.OutstandingOperations.Decrement();
}
public ActionResult DownloadCompleted()
{
return RedirectToAction("Index");
}
public string OtherAction()
{
// code for this action.
}
当我单击网页上的下载并单击“OtherAction”按钮时。它仍然同步处理请求。 “OtherAction”只是向用户返回一个字符串,并不耗费时间,这就是我没有让它异步的原因。
我是否需要在 .Increment() 和 .Decrement() 操作之间包含一些代码以将下载文件的代码包装在“某物”内以启动新线程或类似的东西?我无法弄清楚我在这里还缺少什么。我从 AsyncController 继承控制器。
【问题讨论】:
-
你需要使用jquery ajax函数并将数组bites发送到服务器,在那里你可以处理它们并像json一样发送给客户端
-
它可能看起来是同步的原因,因为大多数浏览器同时只打开两个连接。
标签: asp.net-mvc asp.net-mvc-3 asynchronous