То, что вы видите, это ограниченная скорость ввода пула потоков. Это не имеет ничего общего с SemaphoreSlim
или даже async
, так как весь размещенный код на самом деле является синхронным.
На вашей машине три потока могут работать сразу. Пул потоков видит, что у него есть другая работа (47 других элементов уже поставлены в очередь). Таким образом, он ждет немного, а затем вводит другой поток. Следующая группа работ использует четыре потока. Пул потоков все еще находится "позади", поэтому он ждет немного, а затем вводит другой поток и т. Д. c.
Часть "ожидания для бита" в приведенном выше описании - это внедрение ограниченного пула потоков. ставка. Пул потоков должен немного подождать, иначе, когда он получит больше работы, он немедленно создаст группу потоков, которые затем будут удалены, когда работа будет завершена. Таким образом, чтобы быть более эффективным и не допустить такого «перебивания потоков», пул потоков немного подождет, прежде чем создавать новые потоки.