Ще има ли повече свободни нишки в thread pool-а, ако направя тези 2 операции да се извикват с async и await, вместо да блокират работата?
Зависи.
Когато използваш Task.Run, отзад класа Task използва ThreadPool да разтоварва работата като ползва нишка от ThreadPool-а.
Ако сървиса ти не предлага асинхронно API и използваш Task.Run да върши работата, пак ще блокираш нишката от threadpool-a да върши работа на IO, независимо от използването на async-await. В твоя случай и двете извиквания са блокиращи, което значи, че нишката пак ще бъде блокирана, тоест отговорът на въпроса е НЕ.
Ако сървиса и работата с базата имаха асинхронно API(което не използва допълнителни нишки да си върши работата), можеш да ползваш предимството на async-await, тъй като, когато await-ваш някое от тези извиквания(и не трябва да използваш Task.Run), текущата нишка ще върне контролна на тази, която ги е извикала, и може да се използва да върши друга работа. Ако са така нещата, отговорът е ДА.
Според моето разбиране, нишката не прави нищо докато изчаква блокирания таск и не връщат ресурсите си в thread pool-а. Но се чудя ако ги направя извикванията асинхронни дали основната нишка на таска ще може да върши друга работа, докато ги изчаква.
Правилно мислиш. Ако основната работа на threadpool-а е свързана с IO заявка, тогава тя през повечето време стои блокирана, докато заявката приключи.
Когато await-ваш Task, контролът се предава на извикващата нишка. Да предположим, че извикването от сървиса е REST, можеш да използваш HttpClient, което има асинхронни методи, които не използват нишки(GetAsync, PostAsync) и тогава можеш да ги await-неш, което ще освободи нишката и тя може да върши друга работа.