一、区别
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 ,这也是最终组合。
原文地址:https://www.cnblogs.com/fger/p/11438858.html
时间: 2024-10-15 22:53:31