0

在 ASPNET 页面中,我需要生成一个进程来执行一些 CPU 繁重的工作 (ffmpeg)。我希望:
a)在不等待进程退出的情况下向客户端发送响应
b)在进程完成后做某事
如果我这样做:

Process pc = new Process();
pc.EnableRaisingEvents = true;
pc.StartInfo.UseShellExecute = false;
pc.StartInfo.WorkingDirectory = AppDir;
pc.StartInfo.FileName = AppDir + "ffmpeg.exe";
pc.StartInfo.Arguments = ... some strings ...
pc.Exited += new EventHandler(handlerExit);
pc.Start();
// End Page
Response.Flush();
this.Context.ApplicationInstance.CompleteRequest();

void handlerExit(object sender, System.EventArgs e)
    {
            string[] files = Directory.GetFiles(vars["path"] ,vars["filein"] + "*");
            for (int i = 0; i < files.Length; i++)
            {
                File.Delete(files[i]);
            }
    }

当 ffmpeg 仍在运行时,浏览器正确接收响应,但 ASPNET 停止响应每个后续请求。当进程退出时,ASPNET Worker 进程重新开始响应。我试图调整进程优先级启动选项,如 AboveNormal 或 Idle,但没有成功。有什么想法可以管理这个吗?

4

1 回答 1

1

这是由于会话锁定。在您调用的页面上禁用会话。

参考:

对 Web 服务的 jQuery Ajax 调用似乎是同步的

在共享同一会话时处理另一个 Web 应用程序时 Web 应用程序被阻止

完全替换 ASP.Net 的会话

于 2012-06-28T10:13:52.443 回答