c# - 限制并行执行的方法
问题描述
在限制并行执行方面,以下两种方法有什么区别?还是一个比另一个更受欢迎?
var parallelOptions = new ParallelOptions() {MaxDegreeOfParallelism = 4};
Parallel.ForEach(collection, parallelOptions, item =>
{
// ...
});
和
Task ThrottleParallelWorkAsync(IEnumerable<T> data, Action<T> worker)
{
TaskScheduler scheduler = new ConcurrentExclusiveSchedulerPair(
TaskScheduler.Default, // schedule work to the ThreadPool
Environment.ProcessorCount * 2) // Schedule enough to keep all threads busy, with a queue to quickly replace completed work
.ConcurrentScheduler; // We only use the concurrent member of this scheduler "pair".
return Task.WhenAll(
data.Select(v => Task.Factory.StartNew(() => worker(v), CancellationToken.None, TaskCreationOptions.None, scheduler)));
}
解决方案
推荐阅读
- vuejs2 - 如何在加载时从数据库中预选“sw-entity-multi-select”组件值
- npm - 使用 brew 安装 npm 驱动程序时出错
- reactjs - 打印网站(反应组件)时,如何为布局的反应引导断点设置宽度?
- python - 错误 1:PROJ:proj_create_from_database:使用 Pyinstaller 时找不到 proj.db
- python - 具有列表对象的 Numpy Array 的内存使用问题
- python - Django 聚合问题 - 奇怪的行为
- python - pyglet 仅在使用附加绘图命令后才显示形状
- python - pandas Sqlite 和重采样错误仅对 DatetimeIndex 有效
- reactjs - 如何从路由对象制作受保护的路由?
- python - 有什么方法可以将另一行中的名称显示为与熊猫中的 id 对应的新列?