多个短任务

Multiple short tasks

处理多项短期任务的最佳方法是什么?

我有一个案例需要处理很多 short-time/cheap Action。数量可以从 8 到 100 不等,每个动作所需的时间在 0.00x 毫秒到 1 毫秒之间。因为它是针对 UI 的,所以工作应该以 60fps 的速度完成。但我也会 运行 Xamarin 和低端手机上的代码,因此无法始终达到该目标,这就是我使用 Task 的原因。 实际上我正在使用来自 here.

的自定义 TaskScheduler

现在的问题是,如何处理所有这些操作:

Task.Run/Task.Factory.StartNew有多贵?

将多个动作收集在 ConcurrentQueue 中并从最大开始。 4 个任务(在 4 核 CPU 上)将完成 while 循环中的所有操作,直到队列为空?

TaskScheduler 管理的多个任务是否比单个(或几个)任务中的多个操作更昂贵?

我想利用现有的 async/await TPL 结构,但它对许多 small/short/cheap 行动也有好处吗?

最好的方法是使用 Parallel.Invoke()。这比创建任务的开销更低。它还会自动确定同时运行有多少个动作,具体取决于当前的硬件。

有关详细信息,请参阅 documentation

我已经在数千个任务中尝试过,Parallel.Invoke 速度更快。