一、区别

        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     ,这也是最终组合。

 说明:异步和多线程不是一个东西 
 
举个例子:控制器调用一个多线程处理的函数,虽然多线程是异步工作的,但是控制器不必等待立即返回的。
但是 控制器调用一个 具有异步的多线程,因为 async是配合await使用的,当作普通方法调用的方式,但是此函数也未执行完毕,就会导致控制器没有办法立即返回结果
 
二、关于 static 静态并发的问题

求助技术老大给的指点:

最终解决方案:用非静态类来处理的。

之前还以为

我还以为,new里面的Task.Run会受到控制器的声明周期影响呢(即控制器返回后,Run不会在后台一直运行呢),发现并不会。我特别测试了一下,如何测试有误,请详细检测。

最新文章

  1. <![CDATA[的web使用简单说明
  2. 洛谷P1782 旅行商的背包[多重背包]
  3. C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 服务器之间的接口通讯功、信息交换
  4. day15_集合第一天
  5. (转)数字格式化函数:Highcharts.numberFormat()
  6. java并发编程-线程池的使用
  7. 记录一下mvc发布
  8. AcmeAir安装AI探针--SaaS版
  9. 浅谈Spring(二)
  10. C++_知识点_namespace
  11. Swift - 图像控件(UIImageView)的用法
  12. ASP.NET页面之间传递值的几种方式(转载)
  13. 《.NET 进阶指南》读书笔记1------NET程序集与普通EXE文件的区别
  14. Educational Codeforces Round 63 (Rated for Div. 2) B. Game with Telephone Numbers 博弈思维+模拟+贪心思维
  15. Java中枚举的使用
  16. [JVM-1]Java运行时数据区域
  17. SPSS for Mac 安装教程
  18. (转) MySQL分区与传统的分库分表
  19. js之点击值发生变化
  20. cogs1538 [AHOI2005]LANE 航线规划

热门文章

  1. 解决Acunetix 12中文汉化的方法
  2. ionic使用自定义icon
  3. tree 命令
  4. 微信小程序image组件
  5. 线段树板子1(洛谷P3372)
  6. __main__ — Top-level script environment
  7. leetcode 720. 词典中最长的单词
  8. 20160513--js 弹出窗口带有iframe控件 备忘
  9. Delphi XE2 之 FireMonkey 入门(26) - 数据绑定: TBindingsList: TBindExprItems
  10. 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_02 泛型_4_定义和使用含有泛型的方法