Эксперементальным путем было выявлено, что ConcurrentExclusiveSchedulerPair ограничивает параллелизм действия до полного завершения (не учитывая наличия асинхронного ожидания внутри действия).
Возможно, было бы неплохо иметь возможность ограничить как общее кол-во параллельно выполняющихся операций (в том числе находящихся в ожидании), так и иметь отдельный ограничитель на операции, которые не находятся в состоянии ожидания.
How to run a Task on a custom TaskScheduler using await?
https://stackoverflow.com/questions/15428604/how-to-run-a-task-on-a-custom-taskscheduler-using-await
Замечание1: для асинхронных методов влияние также оказывает SynchronizationContext | Контекст синхронизации.
Замечание2: можно реализовать нечто похожее, если в приложении нет контекста синхронизации, выставив один семафор в коде (ограничит действия с ожиданием), а второй в CustomTaskScheduler (ограничит действия без ожидания).