Ограничения использования SemaphoreSlim

Документация говорит:

Класс SemaphoreSlim представляет собой легкий и быстрый семафор, который можно использовать для ожидания в рамках одного процесса, когда ожидается, что время ожидания будет очень коротким.

Что значит очень короткий? Кто-нибудь знает явное значение времени в миллисекундах? Можно ли использовать инстанс SemaphoreSlim, если время ожидания составит около 5 минут?

🤔 А знаете ли вы, что...
C# поддерживает интероперабельность с кодом, написанным на C++, что позволяет использовать существующие библиотеки.


3
701
1

Ответ:

Решено

Можно ли использовать инстанс SemaphoreSlim, если время ожидания составит около 5 минут?

Да, это нормально.

Документацию не следует читать в том смысле, что SemaphoreSlim следует использовать только тогда, когда ожидается, что время ожидания будет очень коротким. Скорее, он больше подходит для таких ситуаций, чем более тяжелая альтернатива Semaphore.

Что значит "очень коротко"? Трудно сказать, так как это зависит от того, что еще происходит в коде. Но я бы поставил его в диапазоне десятков миллисекунд, возможно, до сотен миллисекунд. Если вы говорите о секундах или дольше, я ожидаю, что не будет значительного преимущества одного над другим.

Если ваше время ожидания значительно больше, то накладные расходы на выделение и управление классом Semaphore по сравнению с классом SemaphoreSlim, вероятно, не будут значительными в общем профиле вашего исполняемого кода. Таким образом, вы можете легко обойтись без использования Semaphore в таких ситуациях без существенного влияния на производительность вашего кода, даже если технически это менее эффективно.

Лично я всегда использую SemaphoreSlim вместо Semaphore, за исключением случаев, когда мне нужна функция последнего, которую первый не поддерживает. Это встречается не очень часто, а теперь еще реже, когда в C# и .NET доступны еще более высокие абстракции для координации одновременно выполняемого кода. Даже использование семафора вообще стало для меня чем-то вроде редкости.