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 ワーカー プロセスが再び開始されて応答します。AboveNormal や Idle などのプロセス優先度の開始オプションを調整しようとしましたが、成功しませんでした。これを管理するためのアイデアはありますか?

4

1 に答える 1

1

これは、セッションのロックが原因です。あなたがそれを呼び出すページでセッションを無効にします。

参照:

Web サービスへの jQuery Ajax 呼び出しは同期しているようです

同じセッションを共有している別の Web アプリの処理中に Web アプリがブロックされました

ASP.Net のセッションを完全に置き換える

于 2012-06-28T10:13:52.443 に答える