SemaphoreSlim основан на SpinWait и Monitor, поэтому поток, ожидающий получения блокировки, некоторое время записывает циклы ЦП в надежде получить блокировку перед передачей другому потоку.Если этого не происходит, то потоки позволяют системам переключать контекст и пытаются снова (путем записи некоторых циклов ЦП), как только ОС снова планирует этот поток.При долгом ожидании этот шаблон может прожечь значительное количество циклов ЦП.Таким образом, лучший вариант для такой реализации - это когда в большинстве случаев нет времени ожидания, и вы можете почти мгновенно получить блокировку.
Семафор опирается на реализацию в ядре ОС, поэтому каждый раз, когда вы получаетеБлокировка, вы тратите довольно много циклов ЦП, но после этого поток просто спит столько, сколько необходимо для получения блокировки.