Почему метод выполняется в главном потоке?
Асинхронность не значит мультитредность.
https://docs.microsoft.com/ru-ru/dotnet/csharp/asyncЕсли ваша задача ограничена ресурсами процессора и вам важна скорость реагирования, используйте async и await, но перенесите выполнение задачи в другой поток с конструкцией Task.Run. Если к задаче применим параллелизм, также можно рассмотреть возможность использования библиотеки параллельных задач.
Явный баг библиотеки, которой вы пользуетесь. Если метод, выполняющий сетевую операцию, заявлен авторами как асинхронный, то никакой блокировки вызывающего потока быть не должно.
Во избежание подобных сюрпризов сторонними библиотеками не пользуюсь. Да, приходится больше грязной работы делать руками. Но, как правило, делается это все один раз, после чего легко переиспользуется.
Вам же сейчас придется разгребать руками чужой говнокод с гитхаба. Большой вопрос - кто потратит больше времени - вы или я?