我正在将文件流式传输到客户端以供下载。但是文件大小可能非常大(最多几 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 继承控制器。