首页 > 解决方案 > 限制并行执行的方法

问题描述

在限制并行执行方面,以下两种方法有什么区别?还是一个比另一个更受欢迎?

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)));
}

第二种方法在这里描述:https ://blogs.msdn.microsoft.com/andrewarnottms/2017/05/11/limiting-concurrency-for-faster-and-more-responsive-apps/

标签: c#task-parallel-library

解决方案


推荐阅读