1控制器运行一个Process进程,等待不等待的问题
Posted fger
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1控制器运行一个Process进程,等待不等待的问题相关的知识,希望对你有一定的参考价值。
一、区别
public static async void Execute(string para, string ffmpegPath, string timestr, string Id, string targetUrl) await Task.Run(() => CreTimeStr = timestr; rowId = Id; compPath = targetUrl; Process p = new Process(); p.StartInfo.FileName = ffmpegPath; p.StartInfo.Arguments = para; //执行参数 p.StartInfo.UseShellExecute = false; p.StartInfo.RedirectStandardInput = true; p.StartInfo.RedirectStandardOutput = true; p.StartInfo.RedirectStandardError = true;//把外部程序错误输出写到StandardError流中 p.ErrorDataReceived += new DataReceivedEventHandler(p_ErrorDataReceived); p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived); using (p) p.Start(); p.BeginErrorReadLine();//开始异步读取 p.WaitForExit();//阻塞等待进程结束 p.Close();//关闭进程 );
上面的方式 async 方法必须配合 await ,导致 Task.Run 中的
一直运行,哪怕
提前return也无效。
最终去掉完美解决:
二、扩展当我们需要返回值(因为没有等待,所以未及时计算出,代码继续往下执行)--此方式完全没有任何意义,这样做。
三、扩展-当我们需要等待的时候就用 await 但是 就必须配合async了
但是 await 后面配合必须是异步的方法,就出现 Task.Run ,这也是最终组合。
以上是关于1控制器运行一个Process进程,等待不等待的问题的主要内容,如果未能解决你的问题,请参考以下文章