Я чувствую, что у меня есть хороший gr asp о том, как работают Wait и WaitAsyn c. Я понимаю, что Wait () заблокирует поток, пока он ожидает, что семафор станет доступным. С другой стороны, WaitAsyn c () вернет этот поток в пул потоков, поэтому он может продолжать использоваться во время ожидания семафора.
Я надеюсь, что кто-то может объяснить, при каких условиях вы бы выбрали Wait () вместо WaitAsyn c ()? Выгодно ли в определенных ситуациях быть абсолютно уверенным, что код продолжает выполняться в том же потоке, вызывая Wait ()? Кажется, я не могу найти вескую причину для использования метода Wait (), поскольку он просто блокирует поток, который, по моему мнению, является пустой тратой ресурсов.
Цитирование другого автора, отвечающего на аналогичный вопрос { ссылка }: "Если у вас есть асинхронный метод c - вы хотите избежать блокирующих вызовов, если это возможно. SemaphoreSlim.Wait () - это блокирующий вызов. Так что произойдет, если вы используете Wait () и семафор в данный момент недоступен? Он заблокирует вызывающую сторону, что является очень неожиданным для asyn c методов "
Почему мы хотим избежать блокировки вызовов и почему это будет неожиданно для asyn c методы?
Спасибо за любую помощь!