Это getId().Result;
является блокирующим вызовом, который может привести к сценарию взаимоблокировки.Текущий поток выполнения будет блокироваться до тех пор, пока не будет вызвана возвращаемая функция.
С другой стороны, используя подход async/await
, вы не будете блокировать.Поток, который обрабатывает этот вызов, будет остановлен и будет доступен для обработки другого вызова.Затем, когда ваш вызов функции будет завершен, результат будет обработан другим потоком пула потоков.
Теперь, как вышеупомянутый блокирующий вызов повлияет на ваше приложение, это зависит от типа вашего приложения.Например, если мы говорим о приложении Windows Forms или приложении WPF, и этот код будет выполняться в потоке пользовательского интерфейса, ваша форма будет зависать до завершения этого вызова.С другой стороны, если это приложение ASP.NET и у вас много запросов на сервер, это может привести к исчерпанию потоков ASP.NET, целью которых является обработка запросов, которые получает сервер.По-видимому, это приведет к тому, что приложение не будет отвечать на новые запросы, пока некоторые из полученных сервером запросов не получат свой ответ.
Что касается сценария тупика, пожалуйста, посмотрите на этот вопрос и особенно на первый ответ.При этом вы найдете ссылку на отличную статью на эту тему Не блокировать асинхронный код .