gpt4 book ai didi

asp.net-mvc - 如何在 asp.net mvc 3 中使下载操作异步?

转载 作者:行者123 更新时间:2023-12-02 22:58:48 24 4
gpt4 key购买 nike

我正在将文件流式传输到客户端以供下载。但文件大小可能会很大(高达几GB),因此我不想阻止用户单击网页上的其他按钮,这些按钮会转到与下载相同的 Controller 。通过在互联网上阅读,我发现我可以使用“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”只是向用户返回一个字符串,并且不是时间密集型的,这就是我没有将其设为异步的原因。

我是否需要在 .Increment() 和 .Decrement() 操作之间包含一些代码,以将下载文件的代码包装在“某物”内以启动新线程或类似的东西?我无法弄清楚我在这里还缺少什么。我从 AsyncController 继承 Controller 。

最佳答案

我认为您在这里遗漏了一些概念。你有两个部分。

服务器
即使不使用任何异步,每个请求也是异步的,因此用户可以向服务器发送其他请求而不会被阻止。

客户端
只要用户开始下载并且不退出浏览器或停止下载,用户就可以继续在同一个选项卡或另一个选项卡中进行操作。下载完成的请求不会停止。

因此,您不需要在服务器中进行任何异步操作。如果下载量很大,我会建议我的用户使用一些下载管理器

关于asp.net-mvc - 如何在 asp.net mvc 3 中使下载操作异步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16198157/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com