110,536
社区成员
发帖
与我相关
我的任务
分享
foreach(Device e in Devs){
if(Device.IsConnected){
object o= e.ReadData();
Save(e.ID,o);
}
}
Task.Run(()=>
{
..........
});
这样返回一个异步任务。
如果只知道自己 new 什么 Thread 对象实例,那基本上是至少15 年前的古老的知识了。因为系统线程池自动管理任务线程(ThreadPool.QueueUserWorkItem)在 .net 1.1 中就是比较基本的知识了。
在你了解了 .net 系统会自动优化线程调度策略之后,再来看任务的顺序操作控制策略,就能比较容易理解。其实两种概念需要你来自己把握。其一,是一个任务20秒未结束之前,是否要启动对同一个设备的另一次采集;其二,是否要等到一个采集任务结束(不管是否超过了20秒钟)之后才开始下一个采集任务。这是你首先要在业务逻辑上自己回答清楚的问题。总是有人先不回答业务逻辑设计问题,反而先来纠结什么编程技术语句,希望通过套取别人的代码来替他自己来回答业务逻辑设计问题。这其实就养成了把狗屁技术凌驾在业务逻辑之上的习惯!真正来说,业务为主旨为目标,而技术只是次要的东西。
如果一个采集没有完成就不应该开始下一个采集,那么你就不可能用什么”20秒定时Timer“的逻辑来说明业务需求,这在”大白话“上在语言上就是说不通的,连语文都没有通讯又怎么描述程序设计呢?!所以业务描述上不可能自相矛盾。真正在那里纠结、争吵的,往往都是用技术概念来浑浑噩噩地当作业务需求来说的人。
那么至于哪一种设计”更好“,其实首先是业务上的考量。跟技术无关。如果你只是问哪一种设计在业务上更好,这是显而易见的。