Почему нужно выбрать SemaphoreSlim Wait over WaitAsync - PullRequest
0 голосов
/ 10 апреля 2020

Я чувствую, что у меня есть хороший gr asp о том, как работают Wait и WaitAsyn c. Я понимаю, что Wait () заблокирует поток, пока он ожидает, что семафор станет доступным. С другой стороны, WaitAsyn c () вернет этот поток в пул потоков, поэтому он может продолжать использоваться во время ожидания семафора.

Я надеюсь, что кто-то может объяснить, при каких условиях вы бы выбрали Wait () вместо WaitAsyn c ()? Выгодно ли в определенных ситуациях быть абсолютно уверенным, что код продолжает выполняться в том же потоке, вызывая Wait ()? Кажется, я не могу найти вескую причину для использования метода Wait (), поскольку он просто блокирует поток, который, по моему мнению, является пустой тратой ресурсов.

Цитирование другого автора, отвечающего на аналогичный вопрос { ссылка }: "Если у вас есть асинхронный метод c - вы хотите избежать блокирующих вызовов, если это возможно. SemaphoreSlim.Wait () - это блокирующий вызов. Так что произойдет, если вы используете Wait () и семафор в данный момент недоступен? Он заблокирует вызывающую сторону, что является очень неожиданным для asyn c методов "

Почему мы хотим избежать блокировки вызовов и почему это будет неожиданно для asyn c методы?

Спасибо за любую помощь!

...