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