处理多个短时任务的最佳方法是什么?
我有一个案例需要解决很多短期/廉价Action
的问题。数字可以从8到100变化,每个动作所需的时间在0.00x ms到1 ms之间。因为它是用于UI的,所以工作应该以60fps完成。但我也会在Xamarin和低端手机上运行代码,因此无法始终达到目标,这就是我使用Task
的原因。
实际上我正在使用here中的自定义TaskScheduler。
现在,问题是,如何处理所有这些行动:
Task.Run
/ Task.Factory.StartNew
有多贵?
在ConcurrentQueue
中收集多个操作并从最大值开始收集是否会更好? 4个任务(在4核CPU上)将解决while循环中的所有操作,直到队列为空?
TaskScheduler管理的多个任务比单个(或几个)任务中的多个操作要昂贵得多吗?
我想利用现有的async / await TPL结构,但它对许多和非常小/短/便宜的动作也有好处吗?
答案 0 :(得分:1)
最好的方法是使用Parallel.Invoke()。这比创建任务的开销更低。它还将自动确定要同时运行的操作数,具体取决于当前的硬件。
有关详细信息,请参阅documentation。
我已尝试过数千个任务和Parallel.Invoke更快。